外皮日期,为什么date2丢弃错误“转换日期和/或从字符串转换时间失败”? 我在SQL Server中遇到以下错误: 转换转换日期和/或从字符串转换时间时失败。 这是我正在运行的代码: 声明 @date1 dateTime, @date2 dateTime ...

问题描述 投票:0回答:1
正在运行的是我正在运行的代码:

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中的工作原理,因此出现了问题。让我们逐步将其分解:

为什么发生此错误?

date t-sql type-conversion format
1个回答
0
投票

FORMAT(@date1, 'yyyy/MM/dd', 'fa')

值转换为波斯文化(
DATETIME

)的格式。

当您尝试将此格式化的字符串back

to入
    fa
  1. 时,SQL Server期望该字符串处于可识别标准的
    gregorian date格式的标准中(例如,
    CAST
    )。
    
    波斯文化(DATE)可能会更改数字或介绍SQL Server无法识别为有效日期格式的字符。
    这解释了您的代码为何在应用之前进行
    YYYY-MM-DD
  2. ,但在将其施放回
    fa
    .时失败。
    在additiondity上,错误不会立即发生
    ,而是为FORMAT而发生,因为:
    
    
  3. 确定波斯语形式的日期可能会导致无效的字符或未识别的格式。
  4. 波斯日历有时会引入SQL Server无法解释为有效Gregorian日期的字符。
  5. 如何正确格式化一个值为波斯日期格式的格式,然后将其放回
  6. DATE
    为了您
    申请
    返回
  7. @date1
类型,您需要避免使用波斯日历系统

calendar转换。

✅solution:转换为波斯日历而无需使用格式

SQLServer没有内置支持直接波斯日历转换,但是您可以使用CLR功能或处理应用程序层中的转换。
    端,如果您只是尝试提取更改日历
  • ,请做到这一点:
  • @date2

为什么这起作用?

DATETIME
安全地截断了时间,而无需更改基础日历系统。

untike

DATE,它不会引入文化环境的任何问题。

⚠️
如果您确实需要SQL Server中的波斯日历日期
SQLServer不本质地支持波斯日历转换,因此您需要
External函数。最好的做法是处理波斯的日期转换applicationlogic(例如,c#,python),而不是sql server。

如果您需要它

Inside SQL Server,您可以考虑在C#中编写CLR函数,将CLR函数转换为波斯日历日期。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.