【问题标题】:sql date format order dd-mm-yyyysql日期格式顺序dd-mm-yyyy
【发布时间】:2016-03-17 20:03:41
【问题描述】:

我正在使用此代码通过 SQL 格式化日期:

convert(VARCHAR, DT, 20)

输出是:

2016-01-01 20:40:12

但是我怎样才能先得到这一天。

我想得到:dd-mm-yyyy:

01-01-2016 20:40:12

当我查看这张表时: http://www.blackwasp.co.uk/sqldatetimeformats.aspx 我没有看到这种格式。

谢谢!

【问题讨论】:

标签: sql sql-server tsql date format


【解决方案1】:

对于dd/mm/yyyy hh:mi:ss

  (CONVERT(varchar, DT, 103) + ' ' + CONVERT(varchar, DT, 108)) AS MyEuropeanDate

对于dd-mm-yyyy hh:mi:ss

  (CONVERT(varchar, DT, 105) + ' ' + CONVERT(varchar, DT, 108)) AS MyEuropeanDate

为了下次正确理解它,请查看 Gordon 在 cmets 中明智地链接的官方文档: https://msdn.microsoft.com/en-us/library/ms187928.aspx

【讨论】:

    【解决方案2】:

    找不到原生 tSQL 函数,但您可以执行以下操作:

        DECLARE @Date DATETIME = '20160101';
    
    SELECT CASE
             WHEN LEN(CAST(DAY(@Date) AS VARCHAR)) = 1 THEN '0'+CAST(DAY(@Date) AS VARCHAR)
             ELSE CAST(DAY(@Date) AS VARCHAR)
          END
          +'-'+
          CASE
             WHEN LEN(CAST(MONTH(@Date) AS VARCHAR)) = 1 THEN '0'+CAST(MONTH(@Date) AS VARCHAR)
             ELSE CAST(MONTH(@Date) AS VARCHAR)
          END
          +'-'+
          CAST(YEAR(@Date) AS VARCHAR)
          +' '+
          SUBSTRING(CONVERT(VARCHAR, @Date, 114), 1, 8);
    

    或者你可以这样做:

    DECLARE @Date DATETIME = '20160101';
    
    SELECT  (REPLACE(CONVERT(varchar, @Date, 103),'/','-') + ' ' + CONVERT(varchar, @Date, 108))
    

    结果:

    【讨论】:

    • 你不觉得你过于复杂了吗? :D
    • @ThomasG 但您的解决方案并不完整。它返回了错误的格式
    • “是”?我什至没有编辑它。根据您的情况开发我的解决方案将返回什么
    • 其实你是对的,OP要求dd-mm-yyyy,我给了dd/mm/yyyy。我会提供两个
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2015-03-22
    相关资源
    最近更新 更多