Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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 Server进行拆分?_Sql_Sql Server_Tsql - Fatal编程技术网

如何使用SQL Server进行拆分?

如何使用SQL Server进行拆分?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想在SQL Server中拆分2009-02-27 14:30:53,使其变成: Y M D T ----------------------- 2009 02 27 14:30:53 是否有人可以使用“Substring”和“Charindex”帮助我执行此操作?您应该能够使用以下函数和a返回时间: select datepart(year, yourDate) y, datepart(month, yourDate) m, datepart(day, y

我想在SQL Server中拆分
2009-02-27 14:30:53
,使其变成:

Y     M   D   T
-----------------------
2009  02  27  14:30:53

是否有人可以使用“Substring”和“Charindex”帮助我执行此操作?

您应该能够使用以下函数和a返回时间:

select
  datepart(year, yourDate) y,
  datepart(month, yourDate) m,
  datepart(day, yourDate) d,
  convert(char(8), yourdate, 108) t
from yourtable

这也可以编写为使用和函数:

select
  year(yourDate) y,
  month(yourDate) m,
  day(yourDate) d,
  convert(char(8), yourdate, 108) t
from yourtable

请参见

您应该能够使用以下函数和a返回时间:

select
  datepart(year, yourDate) y,
  datepart(month, yourDate) m,
  datepart(day, yourDate) d,
  convert(char(8), yourdate, 108) t
from yourtable

这也可以编写为使用和函数:

select
  year(yourDate) y,
  month(yourDate) m,
  day(yourDate) d,
  convert(char(8), yourdate, 108) t
from yourtable

参见

我非常同意如果你是学生,你需要独立思考。如果你是一名学生,这不是正确的学习方式,你应该试着自己做,研究并与同龄人交谈。如果你是一名学生,这种态度导致了当今市场上大量蹩脚的程序员

但是如果你是一个正在寻找解决方案的工作成年人,那么我碰巧有一个通用的StrSplit()函数。您可以像这样使用它:

SELECT * FROM dbo.StrSplit('91,12,65,78,56,789',',')
或者您可以将其用于您的目的:

SELECT  (SELECT Element FROM dbo.StrSplit('2009-02-27','-') WHERE rowid=0) AS Y
        , (SELECT Element FROM dbo.StrSplit('2009-02-27','-') WHERE rowid=1) AS M
        , (SELECT Element FROM dbo.StrSplit('2009-02-27','-') WHERE rowid=2) AS D
        , (SELECT Element FROM dbo.StrSplit('14:30:53',':') WHERE rowid=0) AS H
        , (SELECT Element FROM dbo.StrSplit('14:30:53',':') WHERE rowid=1) AS M
        , (SELECT Element FROM dbo.StrSplit('14:30:53',':') WHERE rowid=2) AS S
定义如下:

CREATE FUNCTION dbo.StrSplit ( @pvsString VARCHAR(MAX), @pvsSeparator CHAR(1) )
RETURNS @fnorsList TABLE ([rowid] INT, [Element] NVARCHAR(500))
AS
BEGIN
    DECLARE @vsElement NVARCHAR(255)
    DECLARE @viPos INT
    DECLARE @viRow INT SET @viRow = 0

    WHILE CHARINDEX( @pvsSeparator, @pvsString) > 0
    BEGIN
        SELECT @viPos  = CHARINDEX(@pvsSeparator, @pvsString)  
        SELECT @vsElement = SUBSTRING(@pvsString, 1, @viPos-1)

        INSERT INTO @fnorsList ([rowid], [Element]) SELECT @viRow, @vsElement
        SELECT @pvsString = SUBSTRING(@pvsString, @viPos+1, LEN(@pvsString)-@viPos)
        SET @viRow = @viRow + 1
    END
    INSERT INTO @fnorsList ([rowid], [Element]) SELECT @viRow, @vsElement
    RETURN
END

我非常同意,如果你是学生,你需要独立思考。如果你是一名学生,这不是正确的学习方式,你应该试着自己做,研究并与同龄人交谈。如果你是一名学生,这种态度导致了当今市场上大量蹩脚的程序员

但是如果你是一个正在寻找解决方案的工作成年人,那么我碰巧有一个通用的StrSplit()函数。您可以像这样使用它:

SELECT * FROM dbo.StrSplit('91,12,65,78,56,789',',')
或者您可以将其用于您的目的:

SELECT  (SELECT Element FROM dbo.StrSplit('2009-02-27','-') WHERE rowid=0) AS Y
        , (SELECT Element FROM dbo.StrSplit('2009-02-27','-') WHERE rowid=1) AS M
        , (SELECT Element FROM dbo.StrSplit('2009-02-27','-') WHERE rowid=2) AS D
        , (SELECT Element FROM dbo.StrSplit('14:30:53',':') WHERE rowid=0) AS H
        , (SELECT Element FROM dbo.StrSplit('14:30:53',':') WHERE rowid=1) AS M
        , (SELECT Element FROM dbo.StrSplit('14:30:53',':') WHERE rowid=2) AS S
定义如下:

CREATE FUNCTION dbo.StrSplit ( @pvsString VARCHAR(MAX), @pvsSeparator CHAR(1) )
RETURNS @fnorsList TABLE ([rowid] INT, [Element] NVARCHAR(500))
AS
BEGIN
    DECLARE @vsElement NVARCHAR(255)
    DECLARE @viPos INT
    DECLARE @viRow INT SET @viRow = 0

    WHILE CHARINDEX( @pvsSeparator, @pvsString) > 0
    BEGIN
        SELECT @viPos  = CHARINDEX(@pvsSeparator, @pvsString)  
        SELECT @vsElement = SUBSTRING(@pvsString, 1, @viPos-1)

        INSERT INTO @fnorsList ([rowid], [Element]) SELECT @viRow, @vsElement
        SELECT @pvsString = SUBSTRING(@pvsString, @viPos+1, LEN(@pvsString)-@viPos)
        SET @viRow = @viRow + 1
    END
    INSERT INTO @fnorsList ([rowid], [Element]) SELECT @viRow, @vsElement
    RETURN
END

我建议使用(或类似的快捷功能
)这个问题没有显示任何研究成果。做家庭作业很重要。告诉我们你发现了什么,为什么它不能满足你的需要。这表明你花了时间来帮助自己,这使我们不必重复显而易见的答案,而且最重要的是,这有助于你得到更具体、更相关的答案。没有,先生,我在问这个问题之前做了一些研究,但说实话,我只是个初学者。事实上我问错了问题。我得到了一列值,如{(2009-02-27 14:30:53),(2008-02-27 14:31:53)…..(2010-02-27 10:31:53)},我需要将该列拆分为4列(Y,M,D,T)。实际上我解决了这个问题(但我不太确定它是否正常,特别是它没有按照我的想法工作,然后我做了一些尝试和错误,它给出了正确的结果?)。我解决它的方式是:选择tmc_代码,子字符串(measurement_-tstamp,1,Charindex('-',measurement_-tstamp)-1)作为y,子字符串(measurement_-tstamp,Charindex('-',measurement_-tstamp)+1,Charindex('-',measurement_-tstamp)-3)作为m,子串(measurement_-tstamp,Charindex('-',measurement_-tstamp)+4,Charindex('',measurement_-tstamp)-9)作为日,子串(measurement_-tstamp,Charindex('',measurement_-tstamp),LEN作为t从[reza].[dbo]开始。[样本2]对不起,我的英语不好………我建议使用(或类似的快捷功能
)这个问题没有显示出任何研究努力。做家庭作业很重要。告诉我们你发现了什么以及为什么它不能满足你的需要。这表明你花了时间尝试帮助自己,它使我们避免重复显而易见的答案,最重要的是它帮助你得到更具体和相关的答案。不,先生,我做了一些在提问之前先研究一下,但说实话,我只是一个初学者。实际上我问问题的方式是错误的。我得到了一列值,比如{(2009-02-27 14:30:53),(2008-02-27 14:31:53)…..(2010-02-27 10:31:53)},我需要将该列拆分为4列(Y,M,D,T)。实际上我解决了这个问题(但我不太确定它是否正常,特别是它没有按照我的想法工作,然后我做了一些尝试和错误,它给出了正确的结果。)我解决它的方法如下:选择tmc_代码,子字符串(measurement_-tstamp,1,Charindex('-',measurement_-tstamp)-1)作为y,子字符串(measurement_-tstamp,Charindex('-',measurement_-tstamp)+1,Charindex('-',measurement_-tstamp)-3)作为m,子字符串(measurement_-tstamp,Charindex('-',measurement_-tstamp)+4,Charindex('',measurement_-tstamp)-9)作为day,子字符串(measurement_-tstamp,Charindex('',measurement_-tstamp),LEN(measurement_-tstamp))作为t从[reza].[dbo].[Sample\u 2]抱歉我的英语不好。。。。。。。。。