【问题标题】:SQL SERVER DATETIME FORMATSQL SERVER 日期时间格式
【发布时间】:2013-02-08 09:36:26
【问题描述】:

学习 SQL Server 有一点我不确定:

具有以下值的 datetime 字段: 2012-02-26 09:34:00.000

如果我使用以下方法从表格中选择:

CAST(dob2 AS VARCHAR(12) ) AS d1

将其格式化为: Feb 26 2012

我不确定他如何或为什么 SQL Server 这样格式化 DateTime。如果您使用datetime2 它不会 - 有人知道为什么吗?

【问题讨论】:

  • 您可以使用 CONVERT() 选择日期(时间)的格式。
  • 在此处查看对日期和时间样式的备注:CAST and CONVERT

标签: sql sql-server datetime


【解决方案1】:

默认日期格式取决于数据库服务器的语言设置。你也可以change it per session,点赞:

set language french
select cast(getdate() as varchar(50))
-->
févr 8 2013 9:45AM

【讨论】:

【解决方案2】:

试试这个:

select convert(varchar, dob2, 101)
select convert(varchar, dob2, 102)
select convert(varchar, dob2, 103)
select convert(varchar, dob2, 104)
select convert(varchar, dob2, 105)
select convert(varchar, dob2, 106)
select convert(varchar, dob2, 107)
select convert(varchar, dob2, 108)
select convert(varchar, dob2, 109)
select convert(varchar, dob2, 110)
select convert(varchar, dob2, 111)
select convert(varchar, dob2, 112)
select convert(varchar, dob2, 113)

参考:http://msdn.microsoft.com/en-us/library/ms187928.aspx

http://www.w3schools.com/sql/func_convert.asp

【讨论】:

  • 这如何回答这个问题?
  • 我在演示不同的格式......参考文献应该解释理论。
【解决方案3】:

Compatibility Supports 这么说 在兼容级别 110 下,timedatetime2 数据类型的 CAST and CONVERT 操作的默认样式始终为 121。如果您的查询依赖于旧行为,使用低于 110 的兼容级别,或在受影响的查询中明确指定 0 样式。

这意味着默认 datetime2 CAST as varchar 121 format。例如; col1 col2 格式(下)相同(除了末尾的0)

SELECT CONVERT(varchar, GETDATE(), 121) col1,
       CAST(convert(datetime2,GETDATE()) as varchar) col2,
       CAST(GETDATE() as varchar) col3

SQL FIDDLE DEMO

--Results
COL1                    | COL2                          | COL3
2013-02-08 09:53:56.223 | 2013-02-08 09:53:56.2230000   | Feb 8 2013 9:53AM

仅供参考,如果您使用CONVERT 而不是CAST,您可以使用第三个参数来指定MSDN 上列出的某些格式

【讨论】:

    【解决方案4】:

    在 MS SQL Server 中你可以这样做:

    SET DATEFORMAT ymd
    

    【讨论】:

      【解决方案5】:
      case when isdate(inputdate) = 1 
      then convert(datetime, cast(inputdate,datetime2), 103)
      else
      case when isdate(inputdate) = 0 
      then convert(datetime, cast(inputdate,datetime2), 103)
      

      【讨论】:

        【解决方案6】:

        这是我最喜欢的 112 和 114 用法

        select (convert(varchar, getdate(), 112)+ replace(convert(varchar, getdate(), 114),':','')) as 'Getdate() 
        
        112 + 114 or YYYYMMDDHHMMSSMSS'
        

        结果:

        Getdate() 112 + 114 或 YYYYMMDDHHMMSSMSS

        20171016083349100

        【讨论】:

          【解决方案7】:

          要使用 sql 语法更改日期格式,您应该使用此查询

          SELECT DATE_FORMAT(`<columnName>`, '%d/%m/%Y') FROM schemaname.tablename;
          

          例如:-

          假设我有一个名为 bugloo 的架构,表名是 tbl_company 在这个tbl_company 中,我有一列都是日期格式%yy/%mm/%dd,列名是createdDate,查询应该是这样的

          SELECT DATE_FORMAT(`createdDate`, '%d/%m/%Y') FROM bugloo.tbl_company;
          

          运行此查询后,我的输出日期将转换为 %dd/%mm/%yyyy

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-27
            • 2021-12-21
            • 1970-01-01
            • 2012-05-08
            • 2018-02-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多