2013-03-15 7 views
1

Есть ли способ получить номер недели с SQL, независимый от базы данных?Получение номера недели в SQL

Например, чтобы получить месяц даты я использую:

SELECT EXTRACT(MONTH FROM :DATE) 

Но функция EXTRACT не знает недель в SQL92.

Обращаем ваше внимание на то, что я хочу получить базу данных, независимую от! Не ошибуйте это как вопрос относительно MS SQL Server.

+1

насчет ** WEEK ('2013-01-15') ** OR ** ВЫБРАТЬ экстракт (неделю с этого момента()) ** –

+1

Укажите RDBMS, на которые вы нацеливаете, добавив соответствующий тег (Oracle, SQL Server, MySQL и т. Д.). Могут быть ответы, которые используют преимущества языка или функций продукта, которые не поддерживаются повсеместно. Кроме того, пометив его конкретными СУБД, ваш вопрос может привлечь внимание от людей, более подходящих для ответа на него. – Taryn

+1

@bluefeet: он/она запрашивает решение, которое «* является независимым от базы данных». –

ответ

0

Вы можете попробовать это.

объявить @date DateTime выберите дату @ = '2013-03-15 00:00:00' выберите 'Неделя No:' + конвертировать (VARCHAR (10), DatePart (WK, дата @)), как weekno

+1

Это определенно ** не ** независимая база данных. –

+0

@khush Спасибо, но это похоже на специфику MS SQL Server. – radlan

0

Попробуйте это: SELECT DATENAME(yy,GETDATE())+RIGHT(DATENAME(wk,GETDATE()),2)

Чтобы понять DATENAME, пожалуйста, перейдите по этой ссылке: sqltutorials.blogspot.be/2007/05/sql-datename.html и права, suite101.com/article/sql-functions-leftrightsubstrlengthcharindex-a209089. Есть примеры, чтобы лучше понять ;-) Он будет работать на MS и других серверах sql нормально ;-)

+0

Помимо факта, что я не совсем понимаю, что это должно делать, это ваш пример только для MS SQL Server? Мне нужно решение, которое также работает с другими базами данных. – radlan

+0

Вы должны отредактировать эту информацию в своем ответе (а не только ссылку, основную информацию внутри) – SztupY

+0

@SztupY: сделано и исправлено :-) – clement

2

Существует не одна стандартная функция SQL для извлечения номера недели с даты - см. here для сравнение того, как различные диалекты SQL могут извлекать разные даты из полей даты.

+0

Спасибо! Это помогает в сравнении «стандартности» дифференцируемых функций. – radlan

0

Единственное независимое решение, которое я вижу, - это получить количество дней между сегодняшним днем ​​и 1 января. год. Затем разделите его на 7 и округлите. Существует 73 дня с 1 января по сегодняшний день, что дает 10.43 в качестве номера недели. Номер недели ISO - 11.

Коррекция: количество дней между последним днем ​​текущей недели и 1 января текущего года. год. В этом случае неделя ISO составляет 10, а 68/7 = 10 (округляется).

+0

Выполнение этого вручную также было бы возможно. Но тогда я должен узнать последний день текущей недели в SQL, что приведет к следующей проблеме. ;-) – radlan

+0

Вы не можете извлечь неделю из месяца. Вы можете получить только номер недели с даты или вручную. И единственное решение, отличное от db, делает это как в моем примере, потому что это можно сделать в любой базе данных. Остальные - это конкретные решения. Извлечь дату, дать правильный формат на сегодняшний день, чтобы получить номер недели. Это ваш единственный выбор. – Art

0

Лучшая идея, которую я нашел,

SELECT ROUND(((DAY(NOW())-1)/7)+1) 
-1
select (DATEPART(yyyy , CAST(GETDATE() AS datetime)) * 100 + 
     DATEPART(ww , CAST(GETDATE() AS datetime))) as week 
+0

Можете ли вы синтаксис выделить ваше сообщение, чтобы сделать заявление более читаемым, пожалуйста? – GhostGambler