【问题标题】:SQL Server datesSQL Server 日期
【发布时间】:2015-04-11 12:52:28
【问题描述】:

我使用 Classic ASP 和 SQL Server 2012。我有一个使用 now() 输入数据库的程序。原来是formnatdatetime(now(),2)

在大多数情况下,一切都很好,但由于某种原因(这就是我要问的原因),有时它会将数据库中的日期格式错误。所以不是ddmmyyyy,而是mmddyyyy

我看不出当代码相同时,数据库如何或为什么相同。我假设 TSQL 中的 now()getdate() 是特定于服务器的。

【问题讨论】:

  • 不要使用字符串在数据库中存储日期/时间值。使用本机日期/时间格式。 GETDATE() 不是“特定于服务器的”。它返回一个datetime 值。
  • @GordonLinoff 您忽略了输入格式是问题所在,因为 SQL Server 在转换为 DATETIME 时必须做出最佳猜测。避免这种情况的简单方法是使用 dd-mmm-yyyy 意味着 SQL Server 不会混淆日期和月份。 OP 在任何时候都没有建议他们将日期作为VARCHAR 存储在数据库中,这是您的假设。
  • @Lankymart 。 . .如果需要当前时间,OP 可以在数据库中使用getdate()。无需中间结果或最终结果即可使用字符串。
  • @GordonLinoff 这确实是解决它的一种方法(对于当前日期时间),但根本问题是将Now() 的输出转换为DATETIMEMaciej 不要碰。

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


【解决方案1】:

你可以使用格式化函数

SELECT FORMAT(GETDATE(),'ddMMyyyy')

结果:

11042015

【讨论】:

    【解决方案2】:

    MS SQL Server 2012 不知道NOW() 函数!正如 Gordon Linoff 所说,您需要改用 GETDATE()

    我建议阅读:Date and Time Data Types and Functions (Transact-SQL) 和:CAST and CONVERT (Transact-SQL)

    SELECT CONVERT(VARCHAR(30), GETDATE(), 103) AS CustomDateFormat
    -- returns: dd/mm/yyyy
    

    请注意,有时sql server无法转换存储为字符串的日期,因此需要使用SET DATEFORMAT,尤其是当sql server使用不同的日期格式时:

    SET DATEFORMAT dmy;
    SELECT CONVERT(VARCHAR(30), '11/04/2015', 121) AS NewDateTime
    

    【讨论】:

    • 人们在这里所做的假设令人不安,正如我多次声明的那样,无论是否使用Now() 或其他日期时间格式功能,例如 ( SQL Server 不需要知道它,只需要能够CAST 将其转换为有效的DATETIME)SET DATEFORMAT dmy; 是解决错误转换日期时间问题的一种相关方法,但传递 SQL Server 无法混淆的格式(例如 dd-mmm-yyyy)也是如此,因为月份缩写不能被误解为日期。
    猜你喜欢
    • 1970-01-01
    • 2014-08-29
    • 2018-05-09
    • 2010-10-07
    • 2020-09-21
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多