【问题标题】:SQL Server ODBC canonical date format to DD/MM/YYYY?SQL Server ODBC 规范日期格式为 DD/MM/YYYY?
【发布时间】:2011-12-19 15:16:47
【问题描述】:

假设我的数据库中有一个日期时间,例如:2011-10-24 00:00:00.000。我想将其转换为24/10/2011,但我找不到执行此操作的本机 SQL Server 方式,并且我宁愿在运行查询后不在代码中执行此操作。

我尝试过如下操作 (as per the manual)

select CONVERT(datetime, '2011-10-24 00:00:00.000', 103);

但是这样不行,我的结果是:

消息 242,第 16 级,状态 3,第 1 行
将 char 数据类型转换为 datetime 数据类型会导致 datetime 值超出范围。

我怀疑这可能是由于小数精度或其中的时间部分,但我不确定如何在不导致一些字符串黑客正则表达式替换废话的情况下进行此操作(我宁愿不这样做,如果我这样做,我还不如在查询后进行转换)。

【问题讨论】:

    标签: sql-server datetime sql-server-2000


    【解决方案1】:

    如果我正确阅读手册,您应该使用 stlye 120 "ODBC canonical" - 不是吗??

    试试:

    select CONVERT(datetime, '2011-10-24 00:00:00.000', 120);
    

    在我的机器上工作 :-) 这为您提供了一个 SQL Server DATETIME 来使用。

    如果您想进一步将其转换为24/10/2011,请使用第二个CONVERT 转换为VARCHAR 字符串:

    select CONVERT(VARCHAR(50), CONVERT(datetime, '2011-10-24 00:00:00.000', 120), 103)
    

    这给了我:

    24/10/2011
    

    【讨论】:

    • 很棒的答案,如果我将 varchar 更改为 10 而不是 50,这不会引起问题吗?
    • @Incognito:不,这也应该没问题 - 我只是“默认”为varchar(50)(例如,它也可以保存一个 GUID),但这只是我的(不好?)习惯....
    • 对我来说看起来不错,我只是希望有一种更短的方法来获得它,它也是转换功能的原生方法。
    • @Incognito:SQL Server 2012 ("Denali") 将具有Format 功能......也许是时候尽快升级了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2021-06-12
    相关资源
    最近更新 更多