代码之家  ›  专栏  ›  技术社区  ›  Sandeep Thomas

在转换函数SQL之前指定字符串日期格式

  •  1
  • Sandeep Thomas  · 技术社区  · 7 年前

    我有一个场景将字符串日期转换为日期格式。但是日期字符串不是直接格式,因此转换会抛出错误。所以我尝试的是

    set dateformat dmy
    

    在使用sql进行转换之前,它的工作没有任何问题。

    但问题是我需要在视图或函数中实现它。但令人失望的部分、功能或观点并不支持 设置日期格式 副作用操作员

    那么,在函数或视图中强制转换之前,如何指定给定字符串的日期格式?

    4 回复  |  直到 7 年前
        1
  •  0
  •   Gottfried Lesigang    7 年前

    parameter of CONVERT() 允许提供格式类型。

    SET DATEFORMAT DMY 我想你要处理的日期像“1/2/2000”,意思是2000年2月1日。

    DECLARE @d VARCHAR(100)='1/2/2000';
    
    SELECT CONVERT(DATE,@d,104)
    

    这个 104 键入4位数的年份。如果这不符合您的需要,您可以通过链接找到更好的适合您的格式。

    如果您需要进一步的帮助,请提供您的实际日期样本。

    提示 :应始终将值存储在具有适当类型的列中。将日期存储为字符串会使事情变慢并打开许多错误源。。。

        2
  •  0
  •   Zohar Peled    7 年前

    正如Damien在对这个问题的评论中所写的那样,理想情况下,您首先不应该搞乱日期时间的字符串表示形式—您应该使用适当的数据类型—而且既然您询问了创建视图的问题,那么这只能意味着在您的数据库中的某个地方有一个日期时间值存储为字符串。
    DateTime2 对于日期时间值, Date 仅限日期值,或 Time

    进一步阅读-亚伦·伯特兰的 Bad habits to kick : choosing the wrong data type

    假设您无法更改数据库设计,请阅读下面的答案。

    set dateformat 在视图或函数上,但您可以使用 convert cast 更改 datetime 将值转换为实际值 值,假设字符串表示形式具有 supported date formats (他们中有不少,所以通常不会有问题)。

    如果 日期时间 转换 函数,则可能需要以字符串操作的形式执行一些额外的工作,以便将其更改为受支持的格式,或者(在更困难的情况下)将字符串表示分离为部分,然后使用 datetimefromparts.

    日期时间

        3
  •  0
  •   Ajay    7 年前
    SELECT CONVERT(varchar(10),CAST('07/01/2018' AS DATE),23)
    

    结果

    2018-07-01
    
        4
  •  0
  •   wnutt    7 年前

    不知道你说的“日期字符串不是直接格式”是什么意思。例子会有所帮助。

    SELECT 
        TRY_PARSE(thedate AS datetime)  as justParse
        ,TRY_PARSE(thedate AS datetime USING 'en-US') as parseUS
        ,TRY_PARSE(thedate AS datetime USING 'en-GB') as parseGB
        ,try_cast(thedate as date) as tryCast
    FROM (values 
    ('07/01/2018')
    ,('01/07/2018')
    ,('07 jan 2018')
    ,('jan 07 2018')
    ,('Monday, 7 January 2019')
    )d(thedate)