经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
给不合法的格式转换成标准格式(案例)
来源:cnblogs  作者:Insus.NET  时间:2019/5/31 8:49:16  对本文有异议

网上有人问,数据格式转换,需要给不合法的格式转换成标准格式

创建一张表,把网友提供的数据填充至表:

 

  1. CREATE TABLE [dbo].[DT]
  2. ([Source] NVARCHAR(50))
  3. INSERT INTO [dbo].[DT] ([Source]) VALUES
  4. ('2017-05-31 15:00'),('2017-06-02 16:15'),('2017-06-12 14:00'),('2017-06-16 10:30'),('2017-06-16 13:00'),('2017-06-26 8:30'),
  5. ('2017-06-29 11:00'),('2017-07-17 16:20'),('2017-07-23 11:00'),('2017-08-0917:15'),('2017-08-09 9:30'),('2017-08-1020:30'),
  6. ('2017-08-15 17:20'),('2017-08-1621:00'),('2017-08-17 20:00'),('2017-08-21 10:30'),('2017-08-2116:30'),('2017-08-21 20:30'),
  7. ('2017-08-23 17:30'),('2017-08-24 15:30'),('2017-08-29 11:30'),('2017-08-3017:30'),('2017-09-02 10:00'),('2017-09-0415:45'),
  8. ('2017-09-05 15:30'),('2017-09-07 9:40'),('2017-09-12 15:30'),('2017-09-12 16:00'),('2017-09-13 13:00'),('2017-09-14 15:30'),
  9. ('2017-09-14 19:10'),('2017-09-14 21:00'),('2017-09-15 9:40'),('2017-09-25 9:50'),('2017-09-25 22:45'),('2017-11-03'),
  10. ('2017-10-06 15:30'),('2017-10-3016:00'),('2017-11-01 11:30'),('2017-11-1015:20'),('2017-12-05 16:30'),('2017-12-19 16:50'),('2018-07-18 16:00')
Source Code

 

下面是Insus.NET的解决方法,写一个自定义函数:

 

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author: Insus.NET
  7. -- Blog: https://insus.cnblogs.com
  8. -- Create date: 2019-05-30
  9. -- Update date: 2019-05-30
  10. -- Description: 转换正确日期
  11. -- =============================================
  12. CREATE FUNCTION [dbo].[svf_ConvertToCorrectDateTime]
  13. (
  14. @DateTimeString NVARCHAR(MAX)
  15. )
  16. RETURNS DATETIME
  17. AS
  18. BEGIN
  19. DECLARE @Source NVARCHAR(MAX) = LTRIM(RTRIM(ISNULL(@DateTimeString,'')))
  20. DECLARE @date_Str NVARCHAR(10) = N''
  21. DECLARE @hour_Str NVARCHAR(2) = N'00'
  22. DECLARE @minute_Str NVARCHAR(2) = N'00'
  23. DECLARE @second_Str NVARCHAR(2) = N'00'
  24. IF LEN(@Source) >= 10
  25. SET @date_Str = SUBSTRING(@Source,1,10)
  26. IF LEN(@Source) - 10 > 0
  27. BEGIN
  28. DECLARE @time_Str NVARCHAR(30) = RTRIM(LTRIM(SUBSTRING(@DateTimeString,11,LEN(@DateTimeString))))
  29. SET @hour_Str = SUBSTRING(@time_Str,1,PATINDEX('%[^0-9]%',@time_Str) -1)
  30. SET @minute_Str = SUBSTRING(REVERSE(@time_Str),1,PATINDEX('%[^0-9]%',REVERSE(@time_Str)) -1)
  31. END
  32. RETURN @date_str + ' ' + @hour_Str + ':' + @minute_Str + ':' + @second_Str
  33. END
Source Code

 

下面是检验函数和网友提供的数据:

 

  1. SELECT [Source],[dbo].[svf_ConvertToCorrectDateTime] ([Source]) FROM [DT]
Source Code

 

原文链接:http://www.cnblogs.com/insus/p/10952385.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号