kurakinvit
1/16/2014 - 11:33 AM

T-SQL

T-SQL

Как получить начало и конец суток:

declare @dateStart datetime, @FromDate datetime, @initDate datetime, @dateEnd datetime, @ToDate datetime
--set @initDate = '2012-12-31 15:05:00'
set @initDate = getdate()

-- получаем дату начала суток
set @FromDate = (convert(datetime, convert(varchar, @initDate, 101)))
set @dateStart = DATEADD(DAY, DATEDIFF(DAY, 0, @initDate), 0)

-- получаем дату окончания суток
set @ToDate = (convert(datetime, convert(varchar, @initDate, 101) + ' 23:59:59'))
-- получаем дату начала следующего дня
set @dateEnd = DATEADD(DAY,1+DATEDIFF(DAY,0,@initDate),0)

select @Fromdate, @dateStart
select @ToDate, @dateEnd
-- Variant 1

DECLARE @S varchar(max),
  @Split char(1),
  @X xml

SELECT @S = '1,2,3,4,5',
  @Split = ','

SELECT @X = CONVERT(xml,'<root><s>' + REPLACE(@S,@Split,'</s><s>') + '</s></root>')

SELECT [Value] = T.c.value('.','varchar(20)')
FROM @X.nodes('/root/s') T(c)

-- Variant 2
declare @string nvarchar(500)
declare @pos int
declare @piece nvarchar(500)
declare @strings table(string nvarchar(512))

SELECT @string = '101,28,256'

if right(rtrim(@string),1) <> ','
   SELECT @string = @string  + ','

SELECT @pos =  patindex('%,%' , @string)

while @pos <> 0 
begin
 SELECT @piece = left(@string, (@pos-1))

 --you now have your string in @piece
 insert into @strings(string) values ( cast(@piece as nvarchar(512)))

 SELECT @string = stuff(@string, 1, @pos, '')
 SELECT @pos =  patindex('%,%' , @string)
end

SELECT * FROM @Strings