Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите, можно как то сделать так что бы между датой Start и Finish искался сегодняшнее число и определялась тем самым неделя.

Пример :

Start
13-06-2016
20-06-2016


Finish
19-06-2016
26-06-2016


И к примеру определялась что сегодня 24-06-2016 а значит вторая строка подходит и выводить эту строку.
Побовал через datepart(dw,start), не вышло.
24 июн 16, 10:16    [19329793]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Сделал вот так

where  ([Start] < CONVERT(DATETIME,GETDATE()) 
	AND Finish > CONVERT(DATETIME,GETDATE()))
24 июн 16, 10:37    [19329940]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
правильный проходящий.
Guest
Pabl0
Сделал вот так

where  ([Start] < CONVERT(DATETIME,GETDATE()) 
	AND Finish > CONVERT(DATETIME,GETDATE()))
А зачем тут конвертации?

GETDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server.
24 июн 16, 10:59    [19330126]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Userus
Member

Откуда:
Сообщений: 4643
Pabl0
Сделал вот так

where  ([Start] < CONVERT(DATETIME,GETDATE()) 
	AND Finish > CONVERT(DATETIME,GETDATE()))


На пограничных значениях не будет работать.. Если и конвертить, то в date (если верить "примеру") и делать нестрогое неравенство, тогдауж..

WHERE  ([Start] <= CONVERT(DATE, GETDATE()) 
         AND
       ([Finish] >= CONVERT(DATE, GETDATE()))
24 июн 16, 17:43    [19332957]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Userus
Member

Откуда:
Сообщений: 4643
Userus
Pabl0
Сделал вот так

where  ([Start] < CONVERT(DATETIME,GETDATE()) 
	AND Finish > CONVERT(DATETIME,GETDATE()))


На пограничных значениях не будет работать.. Если и конвертить, то в date (если верить "примеру") и делать нестрогое неравенство, тогдауж..

WHERE  ([Start] <= CONVERT(DATE, GETDATE()) 
         AND
       ([Finish] >= CONVERT(DATE, GETDATE()))


Со скобками косяк... Вот так:

WHERE  ([Start] <= CONVERT(DATE, GETDATE())) 
         AND
       ([Finish] >= CONVERT(DATE, GETDATE()))
24 июн 16, 17:45    [19332963]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
У меня вот такая ошибка ...

"Type DATE is not a defined system type."
27 июн 16, 12:29    [19339490]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
Версия сервера <= 2005 или режим совместимости базы <= 90
27 июн 16, 12:36    [19339522]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
У меня SQL Server 2008

Как сделать режим совместимости базы <= 90
27 июн 16, 13:02    [19339686]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
наоборот, надо выставить базе совместимость 100.
у меня перечислены варианты развития событий, когда вываливается та ошибка.
потому что тип date появился в 2008-ом.
соответственно, если база в режиме совместимости < 100, ей этот тип неизвестен
alter database your_db set compatibility_level = 100
27 июн 16, 13:07    [19339711]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Да, вы все правильно говорите, сделал

USE IMS_TEST;  
GO  
SELECT compatibility_level  
FROM sys.databases WHERE name = 'IMS_TEST';  
GO


показывает 80

А делаю
ALTER DATABASE IMS_TEST 
SET COMPATIBILITY_LEVEL =  100;
go


ругается на 100 тип неправильный синтаксис, хотя даже на msdn так написано.
27 июн 16, 13:35    [19339910]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
ошибку надо не пересказывать, а копировать полностью.
думаю, сервер вовсе не 2008.
покажите
select @@version
27 июн 16, 13:37    [19339930]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Microsoft SQL Server 2005 - 9.00.3042.00 (X64) Feb 10 2007 00:59:02 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

А показывал 2008 ....


Ошибка: Incorrect syntax near '100'.
27 июн 16, 13:40    [19339947]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
ну так сервер 2005, а тип появился в 2008.
вы не можете его использовать.
а сервер не может выставить базе совместимость с будущей (по отношению к его собственной) версией
27 июн 16, 13:42    [19339959]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Какая то не решаемая задача :(
27 июн 16, 13:45    [19339985]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
вы запутали уже и себя, и всех.
вам надо что, чтоб дата попадала в какой-то интервал?
при чем тут распознавание и неделя?
чем не устраивает обычный between?
27 июн 16, 13:50    [19340004]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
WHERE CURRENT_TIMESTAMP>=[Start] AND CURRENT_TIMESTAMP<DATEADD(DAY,1,[Finish])
27 июн 16, 14:12    [19340127]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
(GETDATE() BETWEEN [Start] AND [Finish]) Сделал вот так, мне выдает Текущий диапазон даты, но мне нужно что бы была не текущая неделя, а предыдущая неделя всегда отображалась, - 1 одну неделю другими словами.
27 июн 16, 14:17    [19340155]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
(GETDATE() - 1 BETWEEN [Start] AND [Finish]) Идеально :)
27 июн 16, 14:17    [19340159]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
iap
WHERE CURRENT_TIMESTAMP>=[Start] AND CURRENT_TIMESTAMP<DATEADD(DAY,1,[Finish])

уже выяснили, что у него 2005-ый
27 июн 16, 14:25    [19340207]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
Pabl0
(GETDATE() - 1 BETWEEN [Start] AND [Finish]) Идеально :)

вы думаете, из любого дня отнять 1, попадете на предыдущую неделю?
просто сегодня понедельник, завтра этот же код выведет текущую неделю
-----------
вы почему сразу не говорите то, что вам надо?
предыдущая неделя вылезла только спустя 3 дня обсуждения
27 июн 16, 14:28    [19340219]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
declare @t table (Start datetime, Finish datetime);
insert into @t
select '20160613', '20160619'
union all select '20160620', '20160626'; 

select *
from @t
where convert(char(8),dateadd(day, -7, getdate()), 112) between start and finish;

convert(char(8),..., 112) обрезает временнУю составляющую даты,
-7 отбрасывает на неделю назад
27 июн 16, 14:39    [19340277]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Спасибо, а теперь если усложнить, у меня выводится месяц целиком и мне нужно что бы выводилось первое число месяца текущего.
27 июн 16, 15:23    [19340572]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Nemoxur
Member

Откуда:
Сообщений: 179
самый простой вариант сложить первое число с текущим месяцем
'01' + MOTNH(getdate()) + YEAR(getdate())
27 июн 16, 17:36    [19341336]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
Nemoxur
Member

Откуда:
Сообщений: 179
Точнее так

select CAST(YEAR(getdate()) AS VARCHAR(4)) + CAST(MONTH(getdate()) AS VARCHAR(2)) + '01'
27 июн 16, 17:40    [19341361]     Ответить | Цитировать Сообщить модератору
 Re: Распознавание даты  [new]
o-o
Guest
Nemoxur
Точнее так

select CAST(YEAR(getdate()) AS VARCHAR(4)) + CAST(MONTH(getdate()) AS VARCHAR(2)) + '01'

сам-то пробовал запустить свой код?
сейчас как раз подходящий месяц, в одну цифру
---
2016601
27 июн 16, 17:56    [19341467]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить