【问题标题】:SQL date-format conversion quesSQL日期格式转换问题
【发布时间】:2012-04-16 06:26:03
【问题描述】:

我需要将我的日期设置为以下格式:

12/3/2011 例如与 12/03/2011 相对

我目前在结果集上使用的 SQL 是:

CONVERT(VARCHAR(10), Created, 105) as Created

我该怎么做,谢谢!

【问题讨论】:

  • 那是 MM/d/yyyy 还是 dd/M/yyyy?
  • 日期格式 105 是 DD/MM/YYYY(意大利风格)。因此,发布者想要 D/M/Y。
  • 这个问题虽然突出了使用模棱两可的格式的问题。对于 MOST 受众,明确的输出格式更好,例如YYYY-MM-DD.

标签: sql sql-server date


【解决方案1】:

如果针对列,所有这些方法都会影响性能。由于 C# 和许多其他客户端语言具有更灵活的功能来格式化日期等内容,因此您应该在客户端层应用这种格式设置。大概在哪里,您将遍历所有行并在显示它们时单独处理值。

【讨论】:

  • 将数据保存为数据。更容易比较、做数学等。格式化字符串绝对是表示层的功能。
【解决方案2】:

SQL Server 中没有标准的日期格式可以返回一个数字来表示天数或月数。您可以使用 MONTH、DAY 和 YEAR 函数自行滚动

-- M/D/Y format (USA)
SELECT CAST(MONTH(@date) AS varchar(2)) + '/'
       + CAST(DAY(@date) AS varchar(2)) + '/'
       + CAST(YEAR(@date) AS varchar(4))

-- D/M/Y format (everywhere else)
SELECT CAST(DAY(@date) AS varchar(2)) + '/'
       + CAST(MONTH(@date) AS varchar(2)) + '/'
       + CAST(YEAR(@date) AS varchar(4))

【讨论】:

    【解决方案3】:

    CONVERT(CHAR(10), CONVERT(DATETIME, Created), 103)

    【讨论】:

      【解决方案4】:

      有一个更好的建议。我会添加一个格式函数,因为你要求的有点不常见,

      http://www.sqlusa.com/bestpractices2005/centurydateformat/

      查看 fnFormatDate。然后你可以用你想要的任何方式格式化它,但它可能/可能不是内联的,这是你想要对语句执行的操作

      REPLACE(CONVERT(VARCHAR(10), Created, 105),'\0','\') as Created

      【讨论】:

        【解决方案5】:

        用 '/' 添加一个 REPLACE '/0',然后检查 LEFT 或第一个字符是否为 0

        【讨论】:

        • 有些字不加粗也没关系
        猜你喜欢
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        • 2021-04-30
        相关资源
        最近更新 更多