Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Подскажите, пожалуйста, как правильно прописать код.
При исполнении возникает "Ошибка преобразования значения varchar "@year" в тип данных int."
Я так понимаю, что нужно применить cast, но строк select много, и это намного увеличит время выполнения..
Или здесь нужен другой подход

begin
 DECLARE @year  varchar(4) = '2013' ;
  
 select 
 (select  sum ([76])  FROM [REPORT].[dbo].[76temp] where (Beneficiary like N'%рога%' or externalchannel like N'%рога%')
  and (year ([DatePosting]) = '@year')) as 'рогабанк'  ,
  (select  sum ([76])   FROM [REPORT].[dbo].[76temp] where (Beneficiary like N'%копыта%' or externalchannel like N'%копыта%')
  and (year ([DatePosting]) = '@year'))as 'копытабанк'
29 янв 14, 15:15    [15488581]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
Glory
Member

Откуда:
Сообщений: 104760
year ([DatePosting]) = '@year' - это что такое ?
year ([DatePosting]) = @year наверное должно быть
29 янв 14, 15:17    [15488604]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
googlogmob,

почему Вы считаете, что строка '@year' имеет какое-то отношение к переменной @year?

Кроме того,то фрагмент действительно UDF?
Тогда пока неясно, почему она не inline?

И зачем эти подзапросы с SUM() из одной таблицы, но с разными условиями отбора?
Достаточно в каждой строке разместить внутри SUM() соответствующий CASE
29 янв 14, 15:21    [15488645]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
year ([DatePosting]) = '@year'
вообще лучше написать как-то так:
[DatePosting]>=@year AND [DatePosting]<DATEADD(YEAR,1,@year)
29 янв 14, 15:31    [15488738]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
year ([DatePosting]) = '@year' - это что такое ?
year ([DatePosting]) = @year наверное должно быть


действительно)) Спасибо в очередной раз rGloy
29 янв 14, 15:36    [15488776]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
iap
year ([DatePosting]) = '@year'
вообще лучше написать как-то так:
[DatePosting]>=@year AND [DatePosting]<DATEADD(YEAR,1,@year)


iap, прошу прощения за такой простой вопрос, но объясни пожалуйста новичку, чем именно
29 янв 14, 15:38    [15488789]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
googlogmob
iap
year ([DatePosting]) = '@year'

вообще лучше написать как-то так:
[DatePosting]>=@year AND [DatePosting]<DATEADD(YEAR,1,@year)



iap, прошу прощения за такой простой вопрос, но объясни пожалуйста новичку, чем именно
Если сделать индекс по полю DatePosting, то в первом случае он всё равно НИКОГДА не будет использоваться сервером,
а во втором - МОЖЕТ БЫТЬ, будет.
29 янв 14, 15:42    [15488824]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
iap
googlogmob
пропущено...


iap, прошу прощения за такой простой вопрос, но объясни пожалуйста новичку, чем именно
Если сделать индекс по полю DatePosting, то в первом случае он всё равно НИКОГДА не будет использоваться сервером,
а во втором - МОЖЕТ БЫТЬ, будет.


sql сервер установлен на локальном кампе. используется через терминал
Есть смысл использовать такой синтаксис в этом случае?
29 янв 14, 15:52    [15488891]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
googlogmob
sql сервер установлен на локальном кампе. используется через терминал
Есть смысл использовать такой синтаксис в этом случае?


вам же написали, зависит ни от того где стоит сервер (хоть на марсе), а от "Если сделать индекс по полю DatePosting"
29 янв 14, 17:36    [15489810]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4256
+ оффтоп

googlogmob
...Спасибо в очередной раз rGloy

И то хорошо, что хоть все буквы в наличии, порядок не так неважен! :)) :)) :))
29 янв 14, 18:33    [15490202]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
SQL2008
+ оффтоп

googlogmob
...Спасибо в очередной раз rGloy

И то хорошо, что хоть все буквы в наличии, порядок не так неважен! :)) :)) :))

от перестановки.. )))
29 янв 14, 18:38    [15490245]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
googlogmob
iap
year ([DatePosting]) = '@year'

вообще лучше написать как-то так:
[DatePosting]>=@year AND [DatePosting]<DATEADD(YEAR,1,@year)



iap, прошу прощения за такой простой вопрос, но объясни пожалуйста новичку, чем именно
Тогда будет использоваться индекс на поле DatePosting, если он есть.
29 янв 14, 22:10    [15491230]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
alexeyvg
googlogmob
пропущено...


iap, прошу прощения за такой простой вопрос, но объясни пожалуйста новичку, чем именно
Тогда будет использоваться индекс на поле DatePosting, если он есть.


та сервер размещен на виртуалке на ноуте, поэтому индексы не было смысла применять. Но спасибо за разъяснение
30 янв 14, 11:31    [15493266]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Возникла необходимость добавить еще один параметр @vid

like использовать не получается, а с "=" получаем Null-результаты
как правильно подправить?

 begin
 DECLARE @year  varchar(4) = '2013' ;
 DECLARE @vid   varchar(255) = N'%фінансо%'
  
 
 select 
 (select  sum ([76])  FROM [REPORT].[dbo].[76temp] where (Beneficiary like N'%рога%' or externalchannel like N'%рога%') and vid = @vid
  and (year ([DatePosting]) = @year)) as 'рогабанк'  ,
  (select  sum ([76])   FROM [REPORT].[dbo].[76temp] where (Beneficiary like N'%копыта%' or externalchannel like N'%копыта%')and vid = @vid
  and (year ([DatePosting]) = @year))as 'копытабанк'
end
30 янв 14, 18:36    [15496503]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
Glory
Member

Откуда:
Сообщений: 104760
googlogmob
как правильно подправить?

научиться различать Unicode и non-Unicode строки и переменные
30 янв 14, 18:38    [15496521]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
как правильно подправить?

научиться различать Unicode и non-Unicode строки и переменные


с удовольствием научусь :) не нашел в инете ответ на эту задачу
30 янв 14, 18:41    [15496534]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/faq/faq_topic.aspx?fid=127
30 янв 14, 18:42    [15496544]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
o-o
Guest
googlogmob,

чем like-то не угодил?
с "=" не получается, потому что ищите в [REPORT].[dbo].[76temp] в столбце vid значения с процентами
и их там, видимо, нет.

выполните такое:
select * FROM [REPORT].[dbo].[76temp] where vid = @vid


и для сравнения такое:
select * FROM [REPORT].[dbo].[76temp] where vid like @vid
30 янв 14, 18:54    [15496596]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
o-o, да, действительно. Все работает. Спасибо что доходчиво объяснили :)
30 янв 14, 19:15    [15496696]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
o-o
Guest
с юникодом только разберитесь.
Glory намекает, что кладете юникод N'%фінансо%' в неюникодную переменную varchar(255)
и юникод превращается в тыкву...
30 янв 14, 19:31    [15496768]     Ответить | Цитировать Сообщить модератору
 Re: переменная в функции year(дата)  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
o-o
с юникодом только разберитесь.
Glory намекает, что кладете юникод N'%фінансо%' в неюникодную переменную varchar(255)
и юникод превращается в тыкву...


я поменял тогда на nvarchar, но со знаком "=" все равно ничего не получалось.
Поэтому использовал оба совета.
Спасиб за подсказку)
30 янв 14, 20:45    [15497048]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить