如何将混合格式的varchar日期字符串显示为其他格式?

时间:2013-01-09 01:14:31

标签: sql sql-server-2008 date

我使用的是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的任何过程都不是一个选项。我不允许更改来源。

谢谢

2 个答案:

答案 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