sql-server – 转换和验证日期字符串的最佳方式
发布时间:2020-12-12 08:33:19 所属栏目:MsSql教程 来源:网络整理
导读:我有一个单一的char(8)变量,在存储过程中格式化为ddmmyyyy(此值的质量和有效性是未知的,超出我的控制).将值移动到datetime变量中的最有效的方法是什么,如果datetime变量无效,则抛出错误. DECLARE @Source char(8)DECLARE @Destination datetimeSET @Source='0
我有一个单一的char(8)变量,在存储过程中格式化为ddmmyyyy(此值的质量和有效性是未知的,超出我的控制).将值移动到datetime变量中的最有效的方法是什么,如果datetime变量无效,则抛出错误.
DECLARE @Source char(8) DECLARE @Destination datetime SET @Source='07152009' --your solution here SELECT @Destination 这是我能想到的最好的方法: DECLARE @Source char(8) DECLARE @Temp varchar(10) DECLARE @Destination datetime set @Source='07152009' SET @Temp=LEFT(@Source,2)+'/'+SUBSTRING(@Source,3,2)+'/'+RIGHT(@Source,4) IF ISDATE(@Temp)!=1 BEGIN RAISERROR('ERROR,invalid date',16,1) END SET @Destination=@Temp SELECT @Source AS Source,@Temp AS Temp,@Destination AS Destination 编辑这里是我要去… DECLARE @Source char(8) DECLARE @Destination datetime set @Source='07152009' BEGIN TRY SET @Destination=CONVERT(datetime,RIGHT(@Source,4) -- YYYY +LEFT(@Source,2) -- MM +SUBSTRING(@Source,2) -- DD ) END TRY BEGIN CATCH PRINT 'ERROR!!!' --I'll add a little more logic here and abort processing END CATCH SELECT @Source AS Source,@Destination AS Destination 解决方法首先,由于您使用SQL Server 2005,您应该将您的代码可能失败到BEGIN TRY ….. END TRY BEGIN CATCH …. END CATCH块 – 尝试/捕获T-SQL块!第二,对于所有日期操作,我总是使用ISO-8601 format,这将工作,无论在SQL Server中设置当前的日期格式. ISO-8601格式仅适用于日期YYYYMMDD,或YYYY-MM-DDTHH:MM:SS与时间有关,因此我将编写代码: BEGIN TRY SET @Source='07152009' SET @Temp = RIGHT(@Source,4) + -- YYYY LEFT(@Source,2) + -- MM SUBSTRING(@Source,2) -- DD IF ISDATE(@Temp)!=1 BEGIN RAISERROR('ERROR,1) END SET @Destination = CAST(@Temp AS DATETIME) END TRY BEGIN CATCH -- handle error if something bombs out END CATCH 不要依赖任何特定的日期格式设置!给我你的代码,我会尝试在瑞士 – 德国的系统 – 我几乎保证如果你盲目地假设“en-US”,因此“mm / dd / yyyy” – 这是不一样的设置无处不在这个星球 不幸的是,SQL Server处理日期相当薄弱 – 也许这可能是在SQL Server中使用CLR程序集的一个扩展点,这样可以在.NET中使用更丰富的日期处理函数. 渣子 PS:似乎ISO-8601格式我知道YYYY-MM-DD并不总是在SQL Server中工作 – 与在线图书似乎宣讲相反.使用YYYYMMDD或YYYY-MM-DDTHH:MM:SS.谢谢,gbn! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SqlServer 2012 服务器角色
- SQL批量插入数据几种方案的性能详细对比
- sql-server – while循环触发器,循环遍历sql中表的所有列
- Linq to SQL或Entity Framework for Enterprise ASP.NET MV
- sql-server – 在虚拟机中运行SQL Server的最佳实践是什么?
- SQL Server 2005/2008 用户数据库文件默认路径和默认备份路
- sql – 从另一个表中替换select语句中的一行中的多个标记
- SqlServer 与 MySQL 基本操作语句对比
- 基于其他行排除行(SQL)
- SQLServer中的执行计划缓存由于长时间缓存对性能造成的干扰