【问题标题】:SQL SERVER Convert Date FormatSQL SERVER 转换日期格式
【发布时间】:2017-06-22 02:30:22
【问题描述】:

现在在列中存储三种不同格式的字符串。这样的例子

  • 2/04/15 9.30-12
  • 2015 年 10 月 1 日上午 10 点至下午 1 点
  • 17/03/15 第一次申请

如何将所有日期转换为 ddmmyyy 等标准日期?使用左 10 是不合适的。

【问题讨论】:

  • 不要将日期存储为文本。永远。

标签: sql sql-server database datetime date-format


【解决方案1】:

以下是我对 SQL2012 的解决方案:

DECLARE @Date AS TABLE(val VARCHAR(30));

INSERT INTO @Date VALUES('2/04/15 9.30-12');
INSERT INTO @Date VALUES('10/01/2015 10am - 1pm');
INSERT INTO @Date VALUES('17/03/15 1st appt');

SELECT TRY_PARSE(LEFT(val, CHARINDEX(' ', val)) AS DATE USING 'en-gb') AS Date FROM @Date;

输出是:

也将尝试为 2008 年找出一些东西。可能。

【讨论】:

    【解决方案2】:

    使用try_convert()。然后再次try_convert()。也许是这样的:

    select coalesce(try_convert(date, left(col, charindex(' ', col + ' ') - 1), 1),
                    try_convert(date, left(col, charindex(' ', col + ' ') - 1), 101),
                    try_convert(date, left(col, charindex(' ', col + ' ') - 1), 103),
                    . . .
                   ) as dte
    from t;
    

    继续尝试不同的风格。请注意这些是订购的。因此,您必须确定 02/01/2012 是 2 月 1 日还是 1 月 2 日。

    【讨论】:

    • 来自 sql server 2012
    • 有什么方法可以处理 sql server 2008?
    猜你喜欢
    • 2019-01-23
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多