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

Откуда:
Сообщений: 111
До сегоднешнего дня для вычисления первого дня месяца, первого дня года и т.д использовал конструкцию
SELECT Convert(Date,DateAdd(Month,-1,DateAdd(Day,1-Day(GetDate()),GetDate())))
      ,Convert(Date,DateAdd(Month, 0,DateAdd(Day,1-Day(GetDate()),GetDate())))
      ,Convert(Date,'1/1/'+convert(char(4),year(GetDate())),101)
      ,Convert(Date,DateAdd(Month, 0,DateAdd(Day,1-Day(GetDate()),GetDate())))

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

SELECT CNomber
FROM Table_name
WHERE BeginDate >= Convert(Date,DateAdd(Month,-1,DateAdd(Day,1-Day(GetDate()),GetDate())))
      AND EndDate < Convert(Date,DateAdd(Month, 0,DateAdd(Day,1-Day(GetDate()),GetDate())))
GO
SELECT  CNomber
FROM  Table_name
WHERE BeginDate >= Convert(Date,'1/1/'+convert(char(4),year(GetDate())),101)
      AND EndDate  < Convert(Date,DateAdd(Month, 0,DateAdd(Day,1-Day(GetDate()),GetDate())))


ERROR: Явное преобразование типа данных int в date не разрешено.

как быть в данной ситуации, подскажите please (читаю инфу по данной теме, но пока ичего не выходит)
10 авг 12, 10:49    [12992117]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Читатель неместный
Guest
select dateadd( month, datediff(month, 0, getdate() ), 0)
select dateadd( week, datediff(week, 0, getdate() ), 0)
select dateadd( quarter , datediff(quarter, 0, getdate() ), 0)
10 авг 12, 10:55    [12992185]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
ERROR: Ошибка арифметического переполнения при преобразовании expression к типу данных datetime
10 авг 12, 11:07    [12992312]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Читатель неместный
Guest
ну на типах данных datetime в 2005 замечательно работает
10 авг 12, 11:13    [12992377]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
ERROR: Явное преобразование типа данных int в date не разрешено.

как быть в данной ситуации, подскажите please (читаю инфу по данной теме, но пока ичего не выходит)

Сделать поля BeginDate и EndDat правильного типа. Т.е. не int, а date
10 авг 12, 11:17    [12992412]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,
первое что пришло в голову, но у меня нет прав на изменение
10 авг 12, 11:24    [12992480]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> первое что пришло в голову, но у меня нет прав на изменение

а что там хранится (даты в int по-разному хранить можно)?

Posted via ActualForum NNTP Server 1.5

10 авг 12, 11:26    [12992504]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Читатель неместный,
на datetime и мой вариант замечательно работает
10 авг 12, 11:27    [12992509]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
первое что пришло в голову, но у меня нет прав на изменение

Тогда изменяйте его в тексте запроса
Что вам непонятно из текста сообщения об ошибке ?
10 авг 12, 11:27    [12992515]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,
что бы я не пробовал написать все время получаю ошибку :
Ошибка арифметического переполнения при преобразовании expression к типу данных datetime
или
Явное преобразование типа данных int в date не разрешено
10 авг 12, 11:46    [12992670]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
Glory,
что бы я не пробовал написать все время получаю ошибку :

Ну так не преобразовывайте int в date - что непонятного ?
10 авг 12, 11:50    [12992701]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,

не понятно как в итоге мне сравнить эти даты
10 авг 12, 12:14    [12992880]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
не понятно как в итоге мне сравнить эти даты

А какой дате соответствует число 245343135 сервер должен откуда узнать ?
10 авг 12, 12:18    [12992912]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,

select BeginDate FROM  Table_name


BeginDate
20100827
20100830
20100830
20100830
20100830
20100831
20100901
20100901
20100901
20100902
20100903
20100904
20100904
20100905
20100906
20100906
10 авг 12, 12:35    [12993027]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
И что серверу с этим делать по-вашему ?
10 авг 12, 12:36    [12993036]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> 20100827
> 20100830

вот так можно получить в таком же формате текущую дату
select year(getdate())*10000 + month(getdate())*100 + day(getdate())

как получить начало месяца, года и т.д. додумаетесь уже самостоятельно, надеюсь?
это можно сравнивать с вашими BeginDate/EndDate. например:
BeginDate > year(getdate())*10000 + month(getdate())*100 + day(getdate())

сравнение >, <, =, <> будет корректным.


Posted via ActualForum NNTP Server 1.5

10 авг 12, 12:46    [12993113]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,
ну в этом и был вопрос: как "это" сравнивать с датами, т.к. это необходимо делать ежемеячно, можно конечно вручную вбивать, как до этого 2 месяца делали, но может можно все-таки что-то придумать
10 авг 12, 12:47    [12993131]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
daw
> 20100827
> 20100830

вот так можно получить в таком же формате текущую дату
select year(getdate())*10000 + month(getdate())*100 + day(getdate())

как получить начало месяца, года и т.д. додумаетесь уже самостоятельно, надеюсь?
это можно сравнивать с вашими BeginDate/EndDate. например:
BeginDate > year(getdate())*10000 + month(getdate())*100 + day(getdate())

сравнение >, <, =, <> будет корректным.


Или просто
BeginDate > CONVERT(CHAR(8),GETDATE(),112)
Неявное преобразование строки в INT
10 авг 12, 12:54    [12993189]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
ну в этом и был вопрос: как "это" сравнивать с датами,

Как, как - преобразоваь число в дату.
10 авг 12, 12:54    [12993194]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,

у меня вроде получилось преобразовать дату в число


SELECT CNomber
FROM Table_name
WHERE     T.TranDate >= CONVERT(varchar(8), DateAdd(Month,-1,DateAdd(Day,1-Day(GetDate()),GetDate())), 112     
      AND T.TranDate <  CONVERT(varchar(8), DateAdd(Month, 0,DateAdd(Day,1-Day(GetDate()),GetDate())), 112) 


так можно сравнивать??????
10 авг 12, 13:15    [12993348]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
а число в дату что-то ни как
10 авг 12, 13:22    [12993396]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
у меня вроде получилось преобразовать дату в число

varchar(8) - это вообще то не число. Это строка.
10 авг 12, 13:24    [12993406]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
10 авг 12, 13:29    [12993426]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
Glory,

CONVERT(datetime, CAST(BeginDate AS CHAR(8)), 101) from Table_name


а так?
10 авг 12, 13:35    [12993455]     Ответить | Цитировать Сообщить модератору
 Re: преобразование типов данных  [new]
MaxiMaxiM
Member

Откуда:
Сообщений: 111
daw,

WHERE CONVERT(date, CAST(BeginDate AS CHAR(8)), 101) >= CONVERT(datetime, CAST(GetDate() AS CHAR(8)), 101)


вариант карявый но работает,

а вот используя вашу конструкцию что-то туплю. првидите пример хотя бы для первого дня месяца
21 авг 12, 15:49    [13044083]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить