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

Откуда: Омикрон Персей 8
Сообщений: 7850
Приветствую!

Комрады, нужна ваша дружеская помощь!
Столкнулся со странным поведением простейшего запроса:
CREATE TABLE [#tempAccount]
(
	[id]		int		NOT NULL,
	[account]	nvarchar(50)	NOT NULL,
)
GO

INSERT #tempAccount VALUES (0, N'abc')
INSERT #tempAccount VALUES (1, N'def')
INSERT #tempAccount VALUES (2, N'ghi')
INSERT #tempAccount VALUES (3, N'jkl')


CREATE TABLE [#tempBases]
(
	[optime]	datetime	NOT NULL,
	[owner]		int		NOT NULL,
	[base_id]	int		NOT NULL,
)
GO

INSERT [#tempBases] VALUES (GetDate(), 0, 40)
INSERT [#tempBases] VALUES (GetDate(), 1, 50)
INSERT [#tempBases] VALUES (GetDate(), 2, 60)
INSERT [#tempBases] VALUES (GetDate(), 3, 70)


SELECT (CONCAT(a.[account], FORMAT(r.[base_id], N'\.idd\_00#'))) FROM [#tempBases] AS r
JOIN [#tempAccount] AS a ON a.[id] = r.[owner]
WHERE DATEDIFF(day, r.[optime], GETDATE()) = 0

DROP TABLE #tempAccount
DROP TABLE #tempBases

Для этих тестовых таблиц все ок, запрос отрабатывает как и ожидается, и возвращает:

abc.idd_040
def.idd_050
ghi.idd_060
jkl.idd_070


Есть аналогичные 2 таблицы, но в рабочей базе, отличие от тестового примера выше только названиями таблиц и полей. Плюс у одной из них есть ограничение на уникальность значений в одном из полей (id).
Больше никаких отличий, форматы данных совпадают.

Проблема в том, что в рабочей базе этот же SQL запрос всегда возвращает только первый кусок данных, т.е. a.[account].
как-будто падает FORMAT и возвращает пустую строку, вместо .df.XXX.

Самое прикольное и непонятное в том, что если написать так
SELECT a.[account], r.[base_id] FROM...

то есть убрать все форматы и конкаты, то все будет ок - получим две колонки с нормальными значениями.

Научите, как сделать правильно, чтобы и на рабочей БД тоже самое работало, как в тестовом примере.
Поскольку результат этого запроса будет выплюнут хранимой процедурой для последующей машинной обработки, мне нужно чтобы на выходе был один столбец, а не десяток, данные из которых конкатенируются в какой-то дополнительный столбец.

Заранее спасибо
--------------------------------------------------------------
o(O_O)o
9 сен 19, 15:07    [21966937]     Ответить | Цитировать Сообщить модератору
 Re: CONCAT + FORMAT в SELECT'e  [new]
Cerebrum
Member

Откуда: Омикрон Персей 8
Сообщений: 7850
разобрался сам

Это из-за null-терминированных строк в рабочей #tempAccount. Сделал пока вот так
(CONCAT(SUBSTRING(a.[account], 0, LEN(a.[account])), FORMAT(r.[base_id], N'\.idd\_00#')))
9 сен 19, 16:00    [21967017]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить