SELECT CASE
WHEN DateField1 LIKE '__/__/____' THEN CONVERT (DATE, DateField1, 103)
WHEN DateField1 LIKE '__/__/__' THEN CONVERT(DATE, DateField1, 3)
WHEN DateField1 LIKE '__-__-____' THEN CONVERT(DATE, DateField1, 105)
WHEN DateField1 LIKE '__-__-__' THEN CONVERT(DATE, DateField1, 5)
END AS dt
FROM tbl
2 回答
更改数据源查询,以便将varchar日期转换为日期
例如转换(datetime,MyDate,103)103假设日期是DD / MM / YY格式
或者您可以尝试使用日期序列功能
如果mydate是您的日期字段值,则再次假设日期为dd / mm / yyyy格式
如果您的整个数据集中的日期格式一致,最简单的方法是在SQL查询中使用
CONVERT()
函数 .CONVERT()
采用可选的第三个参数来指定源数据所在的样式 . 该样式确切地告诉函数如何转换可能采用多种形式(如日期和时间)的值 . 此处列出的代码太多,因此请查看下面链接的MSDN页面以查看所有代码 .例如,如果您的日期以
DD/MM/YY
格式存储,那么您将使用代码3.然后您将像这样转换它:但是,如果您的日期不一致,事情就会变得复杂一些 . 您需要查看可以在那里出现的值类型,并查看是否有任何方法可以以编程方式识别它们 .
一个更复杂的例子是,有时日期将是
DD/MM/YY
,有时候它们将是DD-MM-YY
. 此外,有时它是一个四位数而不是两位数的年份,您将在MSDN页面上注意到它是一个不同的样式代码 . (四位数年份通常是两位数年份加上100的代码 . )您可以使用case语句和
LIKE
模式匹配将所有这些转换为日期 .这些模式与日期或月份只有一位数的日期不匹配,上面的代码可能无法解决您的问题 . 您需要查看数据的外观并编写一些SQL以使其格式正确 .
真的,设计数据库的人不应该在字符串数据类型中添加日期......但有时你只需要处理你所拥有的数据 .
参考我一直在谈论的内容:
MSDN - CAST and CONVERT (Transact-SQL)
MSDN - CASE (Transact-SQL)
MSDN - LIKE (Transact-SQL)