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

Откуда: Spb
Сообщений: 35
Всем доброго времени суток, есть вопросик к гуру

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

В качестве примера.
select mitm_ID, 
mitm_name, 
chck_name,
chck_Date
from tp_CheckItems a
JOIN tp_PreCheckItems b on b.pcit_ID = a.chit_pcit_ID
JOIN tp_MenuItems c on c.mitm_ID = b.pcit_mitm_ID
JOIN tp_Checks d on d.chck_ID = a.chit_chck_ID
where chck_Name = '170' 


Получаю
Картинка с другого сайта.

Обращаю внимание на странную пустоту в mitm_name.
Лезу в программу нахожу чек с номером 170 и вижу что там все хорошо, названия блюд на месте.
Там же выясняю название одного из блюд
ОК, пишу дальше

SELECT mitm_ID, mitm_Name
  FROM tp_menuItems
  where mitm_ID = '04A64AAB-CD25-40AC-835D-8922F25A6C2F' and mitm_Name like '%Набор%'


Получаю
Картинка с другого сайта.

В чем подвох?
21 апр 14, 14:57    [15911154]     Ответить | Цитировать Сообщить модератору
 Re: Непонятность какая то  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Сконвертируйте ваше в mitm_Name в бинарный вид и посмотрите, что там записано. Вполне возможно, присутствуют какие-то спец-символы, которые мешают студии нормально отображать данные.
21 апр 14, 14:59    [15911175]     Ответить | Цитировать Сообщить модератору
 Re: Непонятность какая то  [new]
Glory
Member

Откуда:
Сообщений: 104760
and mitm_Name like '%Набор%' одначает что в поле может быть и такое значение
'                                                                                   Набор'
21 апр 14, 15:03    [15911207]     Ответить | Цитировать Сообщить модератору
 Re: Непонятность какая то  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 630
Gexan,
добавьте в выборку, покажите результат
Len(mitm_Name), LTRIM(RTRIM(mitm_Name)
21 апр 14, 15:45    [15911496]     Ответить | Цитировать Сообщить модератору
 Re: Непонятность какая то  [new]
Gexan
Member

Откуда: Spb
Сообщений: 35
Сделал
 SELECT
  mitm_ID,
  mitm_name, 
  CAST (mitm_name AS binary),
  Len(mitm_Name),LTRIM(RTRIM(mitm_Name))
  FROM tp_menuItems
  where mitm_ID = '04A64AAB-CD25-40AC-835D-8922F25A6C2F' and mitm_Name like '%Набор%'



Итог
Картинка с другого сайта.

Так же нашел в базе интересную функцию :) похоже что оно

CREATE FUNCTION [dbo].[f_MultiLanguageStringToStringByLanguage](@MLS NVARCHAR(MAX), @LanguageID INT)
RETURNS NVARCHAR(MAX) AS
BEGIN
  DECLARE @Index INT
  DECLARE @Length INT
  DECLARE @Part VARBINARY(4)

  IF CONVERT(VARBINARY(1),SUBSTRING(@MLS,1,1)) <> 0x00
    IF @LanguageID <> 0 
      RETURN(NULL)
    ELSE
      RETURN(@MLS)
  SET @Index = 2    
  WHILE @Index <= LEN(@MLS)-2 BEGIN
    SET @Part = CONVERT(VARBINARY(4),SUBSTRING(@MLS,@Index+1,2))
    SET @Length = CONVERT(INT,SUBSTRING(@Part,4,1)+SUBSTRING(@Part,3,1)+SUBSTRING(@Part,2,1)+SUBSTRING(@Part,1,1))     
    IF @Length < 0 OR @Length > LEN(@MLS)-@Index-2 RETURN(NULL)    
    SET @Part = CONVERT(VARBINARY(2),SUBSTRING(@MLS,@Index,1))
    IF CONVERT(INT,SUBSTRING(@Part,2,1)+SUBSTRING(@Part,1,1)) = @LanguageID RETURN(SUBSTRING(@MLS,@Index+3,@Length))
    SET @Index = @Index+3+@Length 
  END
  RETURN(NULL)
END
GO
21 апр 14, 16:44    [15911835]     Ответить | Цитировать Сообщить модератору
 Re: Непонятность какая то  [new]
o-o
Guest
мне уже вот тут объясняли,
что 0х00 -- это 0-терминатор сишной строки, и студия на нем спотыкается.
или смотреть результат в студии в текстовом виде, или убирать 0х00 REPLACE-ом
21 апр 14, 17:44    [15912188]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить