Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从字符串计算日期时间?_Sql_Sql Server 2008 - Fatal编程技术网

Sql 从字符串计算日期时间?

Sql 从字符串计算日期时间?,sql,sql-server-2008,Sql,Sql Server 2008,我在csv文件中有一个日期和时间,如下所示:20140618123022,列格式为datetime,问题是将此字符串转换为“2014-06-18 12:30:22”datetime格式的最佳方式是什么 我将创建一个池过程来执行此操作 我在考虑使用或RIGHT()和LEFT()和串联,这是正确的方法吗 CONVERT([datetime],(((((((((CONVERT([varchar](4),[data],(0))+'-')+substring([data],(5), (2

我在csv文件中有一个日期和时间,如下所示:
20140618123022
,列格式为
datetime
,问题是将此字符串转换为“2014-06-18 12:30:22”datetime格式的最佳方式是什么

我将创建一个池过程来执行此操作

我在考虑使用或
RIGHT()
LEFT()
串联
,这是正确的方法吗

     CONVERT([datetime],(((((((((CONVERT([varchar](4),[data],(0))+'-')+substring([data],(5),
    (2)))+'-')+substring([data],(7),(2)))+' ')+substring([data],(9),
    (2)))+':')+substring([data],(11),(2)))+':')+substring([data],(13),(2)),(0))
或者这个

select convert(datetime,(left(@a,8)+' '+substring(@a,9,2)+':'+substring(@a,11,2)+':'+right(@a,2)))

--返回


您可以使用STUFF函数,如下所示:

DECLARE @D CHAR(14) = '20140619123022'
SELECT STUFF(
        STUFF(
            STUFF(
                STUFF(
                  STUFF(@D,5,0,'-')
                    ,8,0,'-')
                ,11,0,' ')
            ,14,0,':')
        ,17,0,':')
您必须确保您的字符串长度是一致的,即它是一个14个字符长的字符串。
小提琴链接:

最佳方式取决于数据库。您使用的是什么数据库?这里有一篇文章开始:您的最佳选择可能是一个CLR,以实现您的目标。不需要将年、月和日分开,正确解析“20140618 12:30:22”
2014-06-18 12:30:22.000
DECLARE @D CHAR(14) = '20140619123022'
SELECT STUFF(
        STUFF(
            STUFF(
                STUFF(
                  STUFF(@D,5,0,'-')
                    ,8,0,'-')
                ,11,0,' ')
            ,14,0,':')
        ,17,0,':')