首页 > 解决方案 > 在函数 SQL 中强制转换之前指定字符串日期格式

问题描述

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

set dateformat dmy

在 sql 中进行强制转换之前,它没有任何问题。

但问题是我需要在视图或函数中实现它。但令人失望的部分、功能或视图不支持设置日期格式,它称其为副作用运算符

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

标签: sqltsqlsql-server-2012

解决方案


正如 Damien 在他对这个问题的评论中所写的那样,理想情况下,您首先不应该弄乱日期时间的字符串表示 - 您应该使用正确的数据类型 - 并且由于您询问创建视图,它只能意味着在某处您的数据库中有一个日期时间值存储为字符串。
这种情况的解决方案是更改存储此值的方式 -DateTime2用于日期时间值、Date仅日期值或Time时间值。

进一步阅读 - Aaron Bertrand 的坏习惯:选择错误的数据类型

假设您无法更改数据库设计,请阅读此答案的其余部分。

您不能set dateformat在视图或函数上使用,但您可以使用convert而不是将值cast的字符串表示形式更改datetime为实际datetime值,假设字符串表示形式具有一种受支持的日期格式(其中有很多,所以通常它不应该是一个问题)。

如果您的字符串表示的datetime格式不受内置convert函数支持,您可能需要以字符串操作的形式做一些额外的工作,以将其更改为受支持的格式,或者(在更难的情况下)将字符串表示分离为部分,然后使用datetimefromparts.

如果您可以提供您在格式的字符串表示中使用的实际格式,datetime我可能可以编辑此答案以向您确切展示如何操作。


推荐阅读