首页 > 其他 > 详细

给不合法的格式转换成标准格式(案例)

时间:2019-05-30 23:09:17      阅读:113      评论:0      收藏:0      [点我收藏+]

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

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

技术分享图片

 

技术分享图片
CREATE TABLE [dbo].[DT]
([Source] NVARCHAR(50))

INSERT INTO [dbo].[DT] ([Source]) VALUES
(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),
(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),
(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),
(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),
(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),
(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),
(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的解决方法,写一个自定义函数:

技术分享图片

 

技术分享图片
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Insus.NET
-- Blog:        https://insus.cnblogs.com
-- Create date: 2019-05-30
-- Update date: 2019-05-30
-- Description: 转换正确日期
-- =============================================
CREATE FUNCTION [dbo].[svf_ConvertToCorrectDateTime] 
( 
    @DateTimeString NVARCHAR(MAX) 
)
RETURNS DATETIME
AS
BEGIN
    DECLARE @Source NVARCHAR(MAX) = LTRIM(RTRIM(ISNULL(@DateTimeString,‘‘)))
    
    DECLARE @date_Str NVARCHAR(10) = N‘‘
    DECLARE @hour_Str NVARCHAR(2) = N00
    DECLARE @minute_Str NVARCHAR(2) = N00
    DECLARE @second_Str NVARCHAR(2) = N00
   
    IF LEN(@Source) >= 10         
        SET @date_Str = SUBSTRING(@Source,1,10)

    IF LEN(@Source) - 10 > 0
    BEGIN
        DECLARE @time_Str NVARCHAR(30) = RTRIM(LTRIM(SUBSTRING(@DateTimeString,11,LEN(@DateTimeString))))        
        SET @hour_Str = SUBSTRING(@time_Str,1,PATINDEX(%[^0-9]%,@time_Str) -1)
        SET @minute_Str = SUBSTRING(REVERSE(@time_Str),1,PATINDEX(%[^0-9]%,REVERSE(@time_Str)) -1)    
    END
    
    RETURN  @date_str +   + @hour_Str + : + @minute_Str + : + @second_Str
END
Source Code

 

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

技术分享图片

 

技术分享图片
SELECT [Source],[dbo].[svf_ConvertToCorrectDateTime] ([Source]) FROM [DT]
Source Code

 

给不合法的格式转换成标准格式(案例)

原文:https://www.cnblogs.com/insus/p/10952385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!