我使用的是SQL Server 2008 R2。我知道我可以使用带有不同格式代码的CONVERT作为第三个参数来首先转换为DATETIME,然后使用另一个格式代码再次CONVERT到VARCHAR以更改显示格式。
现在真正的问题是我在一列中混合了原始数据。所以我的问题是如何编写单个SELECT语句以从混合YYYY / MM / DD,DD / MM / YYYY全部显示到DD / MM / YYYY?
我尝试使用ISDATE(),但它认为31/01/2013不是日期,而01/01/2013是一个日期。现在我只能想到看YYYY是在左边还是右边来确定正确的输入格式,但我不知道如何在一个SELECT语句中写出来。
首先更改格式然后执行简单SELECT的任何过程都不是一个选项。我不允许更改来源。
谢谢
答案 0 :(得分:5)
为什么不使用字符串操作?类似的东西:
select (case when substring(d, 5, 1) = '/' -- YYYY/MM/DD
then right(d, 2)+'/'+substring(6, 2)+'/'+left(d, 4)
else d
end)
顺便说一下,如果你选择表示为字符串的日期格式,我强烈推荐YYYY-MM-DD(或YYYY / MM / DD),因为比较运算符可以处理它们。
答案 1 :(得分:1)
如果您确定数据中只存在这两种格式(yyyy / mm / dd和dd / mm / yyyy),那么您可能会得到CASE
语句,如下所示: / p>
CASE
WHEN (SUBSTRING(dateColumn, 5, 1) = '/') THEN CONVERT(datetime, dateColumn, 111)
ELSE CONVERT(datetime, dateColumn, 103)
END