Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 3564 - SUBSTR и тип возвращаемого значения.   Make a simular bug
Summary: SUBSTR и тип возвращаемого значения.
Status: CLOSED LATER
Alias: None
Product: SELTA@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: 1.0.5
Hardware: PC All
: P4 major
Target Milestone: версия 1.0.4
Assignee: Станислав Коробейников
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 3247
  Show dependency treegraph
 
In work:
Reported: 2009-02-26 17:55 MSK by Станислав Коробейников
Modified: 2014-09-11 18:51 MSK (History)
3 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Станислав Коробейников 2009-02-26 17:55:33 MSK
1. Проблема 1. (бага 2231)
CAST('aaa' AS nchar(10)) + CAST('aaa' AS nchar(10)) = "aaa       aaa       "
2. Проблема 2. (бага 3560)
...
WHERE DELREC.TYPE=SUBSTR (CAST((DT.SP2156) as mvarchar), 1, 2)
DELREC.TYPE и DT.SP2156 mchar
ERROR: could not find member 1(298099,298099) of opfamily 298262

Надо разобраться как работает SUBSTR от 1с в Postgres и substring в MSSQL. И подумать как изменить сложившуюся ситуацию.
Comment 1 Станислав Коробейников 2009-02-26 17:59:16 MSK
Тест:
Складываем две строки:  


postgres:
SELECT CAST('aaa' as mchar(10)) + CAST('aaa' as mchar(10)) as plus_mchar_10 ,
CAST('aaa' as mvarchar(10)) + CAST('aaa' as mvarchar(10)) as plus_mvarchar_10

mchar(10)    "aaa       aaa       ",
mvarchar(10) "aaaaaa"

MSSQL
SELECT     CAST('aaa' AS nchar(10)) + CAST('aaa' AS nchar(10)) AS plus_nchar_10, CAST('aaa' AS char(10)) + CAST('aaa' AS char(10)) AS plus_char_10, CAST('aaa' AS nvarchar(10)) + CAST('aaa' AS nvarchar(10)) AS plus_nvarchar_10

nchar(10)    "aaa       aaa       "
char(10)     "aaa       aaa       "
nvarchar(10) "aaaaaa"

Получили одинаковые результаты. 

Тест 2:
Складываем две строки:  после substr

postgres:
SELECT substr(CAST('aaa' AS mchar(10)),1,2) + substr(CAST('aaa' AS mchar(10)),1,2) as plus_substr_mchar_10,
substr(CAST('aaa' AS mvarchar(10)),1,2) + substr(CAST('aaa' AS mvarchar(10)),1,2) as plus_substr_mvarchar_10


substr(,1,2) mchar(10)    "aa        aa        " 
substr(,1,2) mvarchar(10) "aaaa"

MSSQL
SELECT SUBSTRING(CAST('aaa' AS nchar(10)), 1, 2) + SUBSTRING(CAST('aaa' AS nchar(10)), 1, 2) AS plus_substr_nchar_10, 
SUBSTRING(CAST('aaa' AS char(10)), 1, 2) + SUBSTRING(CAST('aaa' AS char(10)), 1, 2) AS plus_substr_char_10, 
SUBSTRING(CAST('aaa' AS nvarchar(10)), 1, 2) + SUBSTRING(CAST('aaa' AS nvarchar(10)), 1, 2) AS plus_substr_nvarchar_10
со всеми тремя типами результат один "aaaa"

вовращаемые типы:
plus_substr_nchar_10    nvarchar(4)
plus_substr_char_10	varchar(4)
plus_substr_nvarchar_10	nvarchar(4)

т.е. от преобразует все в var

Итак по разному работает SUBSTRING и SUBSTR.


Надо заметить, что в selta тоже преобразовывалось но вызвало багу , но путем лишниго преобразования уже после самого парсинья

Итого: MSSQL возвращает (n)varchar(число символов на выходе)
postgres тоже самое, что на входе. 
Comment 2 Станислав Коробейников 2010-10-22 19:32:51 MSD
Пока отложим. Это не существенная бага. 
Comment 3 Vitaly Lipatov 2014-09-11 18:51:07 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.