我想以2009-02-27 14:30:53
这样的方式拆分 SQL Server:
Y M D T
-----------------------
2009 02 27 14:30:53
谁能帮我使用“Substring”和“Charindex”来做到这一点?
我想以2009-02-27 14:30:53
这样的方式拆分 SQL Server:
Y M D T
-----------------------
2009 02 27 14:30:53
谁能帮我使用“Substring”和“Charindex”来做到这一点?
您应该能够使用以下DATEPART
函数和日期转换来返回时间:
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