0

2009-02-27 14:30:53次のようにSQL Serverで分割したい:

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

「Substring」と「Charindex」を使用してこれを行うのを手伝ってくれる人はいますか?

4

2 に答える 2

5

DATEPART関数と日付の変換を使用して時刻を返す次を使用できるはずです。

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

デモで SQL Fiddle を参照してください

YEARこれは、 、MONTHおよびDAY関数を使用して記述することもできます。

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

デモで SQL Fiddle を参照してください

于 2013-03-26T01:16:25.750 に答える
0

あなたが学生であれば、自分自身で考える必要があることに強く同意します。あなたが学生の場合、これは正しい学習方法ではありません。自分でやってみて、調べて仲間と話し合うべきです。あなたが学生なら、これは、今日の市場にいるたくさんのくだらないプログラマーに貢献するような態度です.

しかし、あなたが解決策を探している社会人であれば、私はたまたま汎用の 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
于 2013-03-26T01:47:04.663 に答える