powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CONCAT + FORMAT в SELECT'e
2 сообщений из 2, страница 1 из 1
CONCAT + FORMAT в SELECT'e
    #39859379
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

Комрады, нужна ваша дружеская помощь!
Столкнулся со странным поведением простейшего запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
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


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

Код: sql
1.
2.
3.
4.
abc.idd_040
def.idd_050
ghi.idd_060
jkl.idd_070



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

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

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


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

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

Заранее спасибо
--------------------------------------------------------------
o(O_O)o
...
Рейтинг: 0 / 0
CONCAT + FORMAT в SELECT'e
    #39859418
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разобрался сам

Это из-за null-терминированных строк в рабочей #tempAccount. Сделал пока вот так
Код: sql
1.
(CONCAT(SUBSTRING(a.[account], 0, LEN(a.[account])), FORMAT(r.[base_id], N'\.idd\_00#')))
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CONCAT + FORMAT в SELECT'e
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]