【问题标题】:can't find the date style format in sql server 2012在 sql server 2012 中找不到日期样式格式
【发布时间】:2015-02-07 13:34:20
【问题描述】:

我想将此 nvarchar 列转换为日期时间格式:

        "29/12/14 07:46:20 PM"

这种风格不错但没时间:

        SELECT CONVERT(datetime, nvarcharDateColumn, 3) AS [DD/MM/YY]

如何转换并保留所有日期部分(日期+时间)??

【问题讨论】:

  • 你正在做相反的事情。 CONVERT(VARCHAR(8), GETDATE(), 3) 正在将 DATETIME 转换为 VARCHAR(8)。您在第一行中声明要将NVARCHAR 转换为DATETIME。是哪个?
  • 为什么要在 SQL 中格式化日期?在您的 UI 层中执行此操作。
  • @roryap 问题是我找不到合适的日期样式。我知道你在说什么。这只是一个例子。
  • @DavidG 我从 csv 导入了一个表,现在所有列都是 nvarchar 格式。我需要将日期转换为日期时间格式。
  • 你能不能直截了当地说:你想走哪条路?从DATETIMEVARCHAR,或从VARCHARDATETIME

标签: sql-server date sql-server-2012


【解决方案1】:

SQL Server 中的日期时间数据类型没有“格式”。它本身是一个 8 字节的二进制值。要将 nvarchar 字符串转换为日期时间,请使用 CONVERT 并将 nvarchar 列作为第二个参数:

SELECT CONVERT(datetime, nvarcharColumnWithDateAndTime, 3) AS NativeDateTime
FROM dbo.YourTable;

请注意,此查询显示的日期时间格式取决于您使用的应用程序,而不是 SQL Server 数据库。另外,考虑将表数据类型更改为 datetime 以避免数据完整性问题; nvarchar 将允许存储无效日期。

【讨论】:

  • 他希望转换从DATETIMEVARCHAR,而不是相反。
  • @noryap,最近的评论说它是从 csv 导入的 nvarchar 列。
  • @roryap 问题的第一句话说的完全相反。
  • @DanGuzman 时间呢?日期样式 3 只返回日期,没有时间。
  • @Ariox66,这种格式可以在没有样式规范的情况下解析为日期时间,因为它没有歧义。要从日期时间到字符串,最接近的格式是 113,这需要手动插入破折号。 STUFF(STUFF(CONVERT(VARCHAR(30), GETDATE(), 113), 3, 1, '-'), 7 ,1 ,'-')
【解决方案2】:

这个有时间,但是包括毫秒...可能太多了:)

SELECT CONVERT(VARCHAR(30), GETDATE(), 131)

【讨论】:

  • 这会输出18/04/1436 8:55:53:903AM
  • 哦,废话。正在寻找正确的格式,但完全忘记了实际日期(facepalm)
【解决方案3】:

这是我原以为的更艰巨的任务。这是我能想到的最好的:

DECLARE @MyDate DATETIME
SET @MyDate = GETDATE()
SELECT CONVERT(VARCHAR(50), @MyDate, 3) + ' ' + CONVERT(VARCHAR(50), CONVERT(TIME, @MyDate), 100)

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多