【问题标题】:Formatting yyyymmdd varchar column to Month, Day Year in SQL在 SQL 中将 yyyymmdd varchar 列格式化为月、日
【发布时间】:2016-02-21 19:35:11
【问题描述】:

我有一个如下所示的简单查询。我正在尝试将 yyyymmdd 列格式化为月、日、年格式。怎么会这样?

yyyymmdd 返回 2015-11-13 00:00:00.000 我希望它在 2015 年 11 月 13 日返回

SELECT
      CONVERT(datetime, yyyymmdd, 101)  as 'Date of Data',

        cd.[text] as 'Last POS Upload Time Each Day'

FROM MyTable CD 
  WHERE     CD.[Store] = @Store
        AND YYYYMMDD between @Beginning_Date AND @Ending_Date
        AND [text] <> '' 

group by  cd.[Store], [text], cd.[yyyymmdd]
order by  cd.[store], cd.[yyyymmdd], [text]

【问题讨论】:

  • 总是尝试在你的 rdbms 标签中包含 sql 问题 SqlServer, MySql?。某些功能并非在所有数据库上都可用。
  • 我假设它是 SQL-Server,因为它被标记为这样。请看sql-server-helper.com/tips/date-formats.aspx
  • 这里的最佳解决方案当然是修复架构!
  • @JoelCoehoorn 你错过了链接吗?我不明白这有什么帮助
  • 更高版本的 Sql Server 有一个format 函数。你的版本是什么?

标签: sql sql-server datetime


【解决方案1】:

你可以试试这个

SELECT DATENAME(MM, yyyymmdd) + RIGHT(CONVERT(VARCHAR(12), yyyymmdd, 107), 9) AS 'Date of Data',

【讨论】:

  • 谢谢马蒂亚,我试过了,但我得到了这个 November20151113
【解决方案2】:

可能有一个内置函数可以准确返回您要查找的内容,但您始终可以选择自己滚动...

SELECT
        DATENAME(month, yyyymmdd) + ' ' +
        CONVERT(nvarchar(50), DATEPART(day, yyyymmdd)) + ', ' + 
        CONVERT(nvarchar(50), DATEPART(Year, yyyymmdd)) AS [Your Date In Your Format],
...rest of your query

这是proof of concept sqlfiddle

【讨论】:

  • 感谢 LDMJoe...我在 'max' 附近收到不正确的语法错误
  • 您没有指定 SQL Server 的版本。是否有不支持nvarchar(max) 数据类型的版本?尝试用 50 之类的东西替换最大值 - 对于这个应用程序,它应该仍然足够长。它在本地完成时肯定可以工作 - 我更新了问题以包含一个小提琴作为概念证明。
  • 抱歉,这是 SQL 2000,将其更改为 50 效果很好!谢谢!
  • @BradJarrett 我更新了答案。我看到你接受了不同的答案,但如果它有效,我仍然会投赞成票!
【解决方案3】:

Sql Fiddle Demo

CREATE TABLE Table1
    ([MyDate] datetime);

INSERT INTO Table1
    ([MyDate])
VALUES
    ('2015-11-13 00:00:00');

SELECT DATENAME(MM, MyDate) + RIGHT(CONVERT(VARCHAR(12), MyDate, 107), 9) AS [Month DD, YYYY]
FROM Table1

【讨论】:

    【解决方案4】:

    试试这个:

     SELECT 
          DATENAME(MM, '2015-11-13 00:00:00.000')
          + ' '  + RIGHT(CONVERT(VARCHAR(10), '2015-11-13 00:00:00.000', 107), 2)
          + ', ' + RIGHT(CONVERT(VARCHAR(4) , '2015-11-13 00:00:00.000', 107), 9) AS 'FormattedDate'
    

    如果您有任何问题,请告诉我。

    【讨论】:

    • 如果这解决了问题,请标记为解决方案。我希望在 stackoverflow 上建立自己的声誉。
    • 这很棒!我还使用了 LDMJoe 的解决方案,它的工作原理相同。感谢您的帮助!
    • 我很高兴它成功了。我是stackoverflow的新手,所以对我有很多限制。您能否将我的答案标记为解决方案并竖起大拇指?所以我可以赢得一些声誉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2020-10-04
    • 2017-05-12
    • 2017-07-20
    相关资源
    最近更新 更多