【问题标题】:Use TO_DATE in SQL Server 2012在 SQL Server 2012 中使用 TO_DATE
【发布时间】:2017-07-13 07:47:33
【问题描述】:

我有问题。当我在 SQL Server 2012 中执行这条 SQL 语句时:

TO_DATE('2011-11-09 00:00:00','YYYY-MM-DD HH24:MI:SS')

我收到一个错误:

'TO_DATE' 不是集成识别的函数名称。

解决办法是什么?

谢谢!

【问题讨论】:

  • 不重复,我的格式日期不一样。
  • 问题不需要完全重复,只要答案仍然适用。对于人们可以在TO_DATE 中使用的每一种可能的格式,我们不需要一个问题。
  • SQL Server 自上一个问题以来一直在前进
  • 日期格式不同时,解决方法可以不同

标签: sql-server-2012


【解决方案1】:

SQL-Server 没有TO_DATE 函数。你必须使用convert。 见here

-- Specify a datetime string and its exact format
SELECT TO_DATE('2012-06-05', 'YYYY-MM-DD') FROM dual;


-- Specify a datetime string and style 102 (ANSI format), raises an error if conversion fails
  SELECT CONVERT(DATETIME, '2012-06-05', 102);

  -- TRY_CONVERT available since SQL Server 2012 (returns NULL if conversion fails)
  SELECT TRY_CONVERT(DATETIME, '2012-06-05', 102);

根据您的具体情况使用:

convert(DATETIME, '2011-11-09 00:00:00')

【讨论】:

    【解决方案2】:

    TO_DATE() 不是 SQL Server (T-SQL) 中的有效函数

    替代方案取决于您使用的 SQL Server 版本

    CAST() or CONVERT() 可以在任何版本中使用。从 SQL Server 2012 开始,可以使用TRY_CAST()TRY_CONVERT()。使用后一对的优点是,如果字符串在返回 null 时无法转换,它们不会出错。

    对于日期/时间字符串,通常使用 CONVERT() 或 TRY_CONVERT(),因为您可以传递 "style" numbers 其中 YYYY-MM-DD 是“样式”102,例如

    SELECT TRY_CONVERT(DATE,'2017-01-21',102)
    

    但是可以像这个例子一样使用 CAST/TRY_CAST:

    SET DATEFORMAT mdy;  
    SELECT TRY_CAST('12/31/2016' AS datetime)
    

    【讨论】:

      【解决方案3】:

      CONVERT 在 Sql Server 中可以完成与 TO_DATE 在 Oracle 中相同的工作

      SELECT CONVERT(date, yourDate ,104)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-12
        相关资源
        最近更新 更多