0

我正在使用 SQL Server 2008 R2。我知道我可以使用具有不同格式代码的 CONVERT 作为第三个参数,首先转换为 DATETIME,然后再次转换为 VARCHAR,使用另一种格式代码来更改显示格式。

现在真正的问题是我在单个列中混合了原始数据。所以我的问题是你如何编写一个 SELECT 语句来显示从混合的 YYYY/MM/DD、DD/MM/YYYY 到 DD/MM/YYYY?

我尝试使用 ISDATE() 但它认为 31/01/2013 不是日期,而 01/01/2013 是日期。现在我只能想到看 YYYY 是在左边还是在右边来确定正确的输入格式,但我不知道如何在单个 SELECT 语句中写出来。

任何先更改格式然后执行简单 SELECT 的过程都不是一种选择。我不允许更改来源。

谢谢

4

2 回答 2

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),因为比较运算符适用于它们。

于 2013-01-09T01:20:39.527 回答
1

如果您确定数据中只存在这 2 种格式(yyyy/mm/dd 和 dd/mm/yyyy),那么您可能会使用以下CASE语句来逃避:

CASE
  WHEN (SUBSTRING(dateColumn, 5, 1) = '/') THEN CONVERT(datetime, dateColumn, 111)
  ELSE CONVERT(datetime, dateColumn, 103)
END
于 2013-01-09T01:29:27.680 回答