【问题标题】:SQL Server string to date conversionSQL Server 字符串到日期的转换
【发布时间】:2011-07-27 19:24:19
【问题描述】:

我有以下疑问:

SELECT  o.OrderNumber,
    cast(o.DateOrdered as datetime),
    cast(oi.Category as varchar(max))

 FROM   Orders o
    LEFT OUTER JOIN OrderItems oi ON oi.OrderID = o.uid
    LEFT OUTER JOIN OrderAddresses oa ON oa.OrderID = o.uid

 WHERE O.DateOrdered LIKE '6%2011%' AND (oa.Type = '4') AND (oa.Country = 'US')

 GROUP BY cast(oi.Category as varchar(max)), cast(o.DateOrdered as datetime), o.OrderNumber

我在将datetime 格式化为mm/dd/yyyy 时遇到问题。无论我尝试过什么,我都会像YYYY-MM-DD 00:00:00:000一样。我必须忽略语法中的一些简单内容,并希望有人能指出我正确的方向? (SQL Server 2005)

谢谢!

【问题讨论】:

    标签: sql-server sql-server-2005 datetime formatting


    【解决方案1】:

    尝试CONVERT 而不是CAST

    CONVERT(VARCHAR(10), o.DateOrdered , 101)
    

    所以 GROUP BY 语句看起来像:

    GROUP BY CAST(oi.Category as varchar(MAX)), CONVERT(VARCHAR(10), o.DateOrdered , 101), o.OrderNumber 
    

    【讨论】:

    • 当我早些时候尝试过这个(并且再次在这里只是为了确定)时,我最终得到了我的日期格式,当天没有零。例如,我得到的是 2011 年 6 月 1 日而不是 2011 年 6 月 1 日,所以订购已关闭。尝试通过各种格式规范(101、102 等)进行调整,查询返回了相同的结果。有任何想法吗?我得到我们的日期的字符串字段是 nvarchar(50) 是否与它有关?
    • @Scott:我在月份和日期字段中看到 0,我不确定可能是什么问题。试试这个:CONVERT(VARCHAR(10), o.DateOrdered , 112)
    • 该更改不会影响结果集,仍然会获得不带前导零的日期。我以相同的格式测试了 GETDATE(),以确保它与 SQL 服务器无关。还有其他想法吗?
    【解决方案2】:

    CAST 只会转换数据类型 - 但它不能让您选择任何格式。

    对于格式化,您需要改用CONVERT(有关详细信息,请参阅MSDN Books Online):

    试试

    SELECT CONVERT(VARCHAR(25), GETDATE(), 101)
    

    它应该以您正在寻找的格式呈现当前日期。

    【讨论】:

      【解决方案3】:

      看起来 DateOrdered 是 VARCHAR

      请尝试

      SELECT  o.OrderNumber,
          CONVERT(VARCHAR(25),cast(o.DateOrdered as datetime), 101),
          cast(oi.Category as varchar(max))
      
       FROM   Orders o
          LEFT OUTER JOIN OrderItems oi ON oi.OrderID = o.uid
          LEFT OUTER JOIN OrderAddresses oa ON oa.OrderID = o.uid
      
       WHERE O.DateOrdered LIKE '6%2011%' AND (oa.Type = '4') AND (oa.Country = 'US')
      
       GROUP BY cast(oi.Category as varchar(max)), CONVERT(VARCHAR(25),cast(o.DateOrdered as datetime), 101), o.OrderNumber
      

      【讨论】:

      • 谢谢 EricZ!我在 SQL 中工作不多,并且知道我完全忽略了类似的事情。一旦我按照您的示例将演员表包装在转换中,它就解决了问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      相关资源
      最近更新 更多