DECLARE @date1 datetime, @date2 datetime
SET @date1='2024-09-22 00:52:06.000'
SELECT CAST(FORMAT(@date1, 'yyyy/MM/dd', 'fa') AS DATE) date1
SET @date2='2024-09-21 00:52:06.000'
SELECT CAST(FORMAT(@date2, 'yyyy/MM/dd', 'fa') AS DATE) date2
试图执行第二个选择语句时,该错误是专门发生的。我正在尝试将DateTime值格式化为波斯(FA)文化日期格式,然后将其归为日期。
问题:
为什么会发生此错误,为什么只为date2?
?如何将DateTime值的格式化为波斯日期格式,并在没有错误的情况下将其归为日期? 我编写了必须返回
型type的函数,这对于我的用例至关重要。如果返回类型是NVARCHAR,则不会有任何问题,但是要求专门为返回类型为日期。 当我尝试将DateTime值格式化为波斯(FA)格式,然后将其重新施放到日期时,我会遇到错误:
任何帮助或解释都将不胜感激!
由于SQL Server中的工作原理,因此出现了问题。让我们逐步将其分解:
为什么发生此错误?
FORMAT(@date1, 'yyyy/MM/dd', 'fa')
值转换为波斯文化(
DATETIME
)的格式。
fa
gregorian date格式的标准中(例如,
CAST
)。波斯文化(
DATE
)可能会更改数字或介绍SQL Server无法识别为有效日期格式的字符。
这解释了您的代码为何在应用之前进行
YYYY-MM-DD
fa
.时失败。
在additiondity上,错误不会立即发生,而是为
FORMAT
而发生,因为:
DATE
??
为了您申请返回
@date1
calendar转换。 ✅
✅✅solution:转换为波斯日历而无需使用格式 SQLServer没有内置支持直接波斯日历转换,但是您可以使用CLR功能或处理应用程序层中的转换。
@date2
DATETIME
安全地截断了时间,而无需更改基础日历系统。
DATE
,它不会引入文化环境的任何问题。
⚠️如果您确实需要SQL Server中的波斯日历日期
SQLServer不本质地支持波斯日历转换,因此您需要External函数。最好的做法是处理波斯的日期转换applicationlogic(例如,c#,python),而不是sql server。 如果您需要它