Как получить дни дд в дд / мм / гггг в столбце даты - PullRequest
2 голосов
/ 28 июля 2011

Я хочу получить все dd в dd/mm/yyyy столбце даты.Как мне написать запрос для него?Например: если я хочу dd между 28/06/2011 до 02/07/2011, тогда я должен получить вывод, подобный этому:

28
29
30
01
02

Пожалуйста, помогите мне через это

Ответы [ 5 ]

3 голосов
/ 28 июля 2011

Вот решение с использованием таблицы подсчета

DECLARE @StartDate date = '2011-06-28'
DECLARE @EndDate date = '2011-07-02'

SELECT right(convert(varchar, dateadd(day,number,@Startdate), 111), 2)
FROM master..spt_values
WHERE type = 'P' AND number BETWEEN 0 AND DATEDIFF(DAY, @StartDate, @EndDate)

Вы должны знать, что это ограничено 2047 днями. Если вам нужно больше, вы должны подумать о рекурсивном.

2 голосов
/ 28 июля 2011
declare @FromDate date = '20110628';
declare @ToDate date = '20110702';

with cte(TheDate) as
(
  select @FromDate
  union all
  select dateadd(d, 1, TheDate)
  from cte       
  where TheDate < @ToDate
)
select right('0'+cast(datepart(day, TheDate) as varchar(2)), 2) as TheDay
from cte
order by TheDate;
0 голосов
/ 30 июля 2011

У меня есть что-то подобное.Вы можете использовать или создать столько дней, сколько сможете добавить CROSS JOIN в CTE.

SET DATEFORMAT DMY

DECLARE @d1 datetime, @d2 datetime

SET @d1 = '28/06/2011'
SET @d2 = '02/07/2011';

WITH LIST(E) AS (
SELECT 1 E UNION ALL SELECT 2 E UNION ALL SELECT 3 E UNION ALL SELECT 3 E UNION ALL 
SELECT 4 E UNION ALL SELECT 6 E UNION ALL SELECT 6 E UNION ALL SELECT 7 E UNION ALL 
SELECT 8 E UNION ALL SELECT 9 E UNION ALL SELECT 10 E UNION ALL SELECT 12 E UNION ALL 
SELECT 12 E 
),

Numbers (number) AS (
SELECT ROW_NUMBER() OVER (ORDER BY L.E) Number FROM LIST L --CROSS JOIN LIST J
)

SELECT DATEPART(D,DATEADD(D,N.NUMBER-1,@D1)) FROM Numbers n WHERE DATEADD(D,N.NUMBER-1,@D1) <= @D2
0 голосов
/ 28 июля 2011

Использование DATEPART(dd, dateColumnName)

DATEPART(dd, '28/06/2011') возврат 28

Подробнее о DATEPART

0 голосов
/ 28 июля 2011

мой друг, вот функция сервера sql, которая может вам помочь:

select datepart (dw, '5/11/7') as dayOfTheWeek,
       datename (dw, '5/11/7') as NameOfDay

, то есть на одну дату, тогда вы можете сделать цикл по каждой дате и сохранить результат в таблице данных

пометить как ответили, если это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...