sql - 在sql中将varchar转换为datetime

标签 sql sql-server t-sql sql-server-2008-r2

我在这里研究了所有类似的问题,但没有一个有效,这可能是什么问题?我想将 varchar 转换为日期

convert(date,substring(replace(ent.Value,' ',''),1,10),103) < '20140101' 

返回错误 从字符串转换日期和/或时间时转换失败。

ent.Value 这里是类似“28/02/2014”的东西实际上它有效,当我输入类似的东西时

转换(日期,子字符串('28/02/2013',1,10),103)<'20140101'

,但它不能直接从表格中运行

谢谢

最佳答案

要将 varchar 转换为日期时间:CONVERT(Datetime, '28/02/2014', 103)返回日期时间,如 February, 28 2014 00:00:00+0000

要将日期时间转换为 varchar:CONVERT(VARCHAR(10), datetime_field, 103)返回类似 '28/02/2014' 的内容

在这两种情况下,您都无法将其与此类文本进行比较:'20140101'

您可以更改文本,使这两个信息都是 ISO 格式,如下所示:CONVERT(VARCHAR(10), CONVERT(Datetime, ent.Value, 103), 103) < '01/01/2014'

或者REPLACE(ent.Value,'/','') < '01012014'

但我认为比较 varchar 不好 => 你也可以这样做:CONVERT(Datetime, '20140101', 112) :

CONVERT(Datetime, ent.Value, 103) < CONVERT(Datetime, '20140101', 112)

所以你的两个字段都在日期时间中。例如:SQLFIDDLE DEMO

关于sql - 在sql中将varchar转换为datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656606/

相关文章:

t-sql - Tsql 使用文本值对表进行非规范化

sql - 如何使用 max() 函数使用 SQL/postgreSQL 检索最新行

mysql - 当表没有直接涉及外键时如何使用连接搜索数据

c# - 如何循环 SQL 参数列表和 WHERE 子句?或者更有效地获得结果?

sql-server - SQL/SSIS编码检测

sql-server - 为什么在Insert触发器中使用 "IF @@ROWCOUNT = 0 RETURN"?

sql - 在单个结果行中连接选定的值,可以完成(不分组)吗?

MySQL 最大平均值按 2 个字段分组

php - SQL SELECT 问题

选择查询的 SQL 更新查询