SQL将字符串转换为日期

SQL将字符串转换为日期

这确实困扰了我几天,正在寻求帮助。我正在使用 SQL Server 2017。

我正在尝试处理来自自由格式字段的字符串,并将它们转换为“dd/mm/yyyy”格式的日期,或者如果它们不是这种格式,则简单地逐字显示文本。

我在 VIEW 中需要这个,所以不能使用 SET LANGUAGE。听起来很简单,使用转变伊斯达但似乎不起作用。

因此,对于下面的代码片段(记住这将在视图中),我想读取文本,如果字符串转换为日期(即格式为“dd/mm/yyyy”,则运行转换为日期,因为我需要它以日期格式供 Excel 获取(通过连接 SQL Sever 数据库)),如果它没有转换为日期,则按原样显示文本。

create table dateTest1 
( idx int, 
 dateStringTest varchar(15) 
); 
  
insert into dateTest1 (idx, dateStringTest) 
values (1, '13/01/2021'), (2, 'no'); 
 
 
select 
       case when isdate(convert(datetime, dateStringTest, 103)) = 1 
       then convert(datetime, dateStringTest, 103)
       else dateStringTest 
       end as dtres
from dateTest1 
--where idx = 1 
  
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string. 
-- this error happens for idx = 2. Idx = 1 works ok

任何能帮我解决此问题的帮助都会非常感激,因为这让我很头疼。

提前致谢保罗

答案1

我不确定你的数据库是否适合做这个。与其他一些数据库相比,SQL Server 中的数据转换函数有点“笨拙”。

但是,从数据库的角度来看:

如果某事应该成为一个日期,那么它应该日期。
它可能“缺失”(即可为空),但不能是其他任何值。
如果它否则,就不应该被对待作为A日期

用户无法输入日期- 只有角色表现的。
显示应用程序中的 [数字和] 日期需要在“输出”时进行格式化。
将 [数字和] 日期读入应用程序需要相反的操作,即在“输入”时进行“取消格式化”(当然还有验证)。
数据应该总是存储在正确的数据类型——“适合正确工作的正确工具”。

自由文本解析是大概最好在您的应用程序中完成,提取日期值,验证和“取消格式化”,然后存储它。

相关内容