У меня есть данные в столбце, который содержит значения для различных полей из приложения, и все эти поля объединены в одно поле на стороне базы данных и разделены запятыми. Если поле в приложении пустое, то значение между двумя запятыми будет пустым.
Мне нужен оператор выбора, чтобы выбрать каждое из отдельных полей, если они заполнены. Я хотел бы указать каждое поле как переменную, которую я объявлю в верхней части инструкции.
Пример строки в поле базы данных:
, «FIELD1», «FIELD2», «FIELD3», FIELD4, FIELD5, FIELD6 ,,,, «FIELD10», FIELD11, FIELD12, FIELD13
Как видите, поля 7–9 в этом примере были пустыми, поэтому они остаются пустыми в строке.
Мне просто нужен способ выборочно выбрать нужное мне поле, используя запятые в качестве маркера. Строка всегда начинается с запятой, поэтому field1 всегда следует после первой запятой.
Я надеюсь в этом есть смысл!
1 ответ
Попробуй это:
DECLARE @STRING VARCHAR(255) = ',"FIELD1","FIELD2","FIELD3",FIELD4,FIELD5,FIELD6,,,,"FIELD10",FIELD11,FIELD12,FIELD13'
DECLARE @FieldToReturn INT = 12 -- Pick which field you want
SET @STRING = RIGHT(@STRING, LEN(@STRING) - 1) + ',' -- Strip leading comma & add comma to the end
WHILE @FieldToReturn > 1
BEGIN
SET @STRING = SUBSTRING(@STRING,PATINDEX('%,%',@STRING), LEN(@STRING))
SET @FieldToReturn = @FieldToReturn - 1
SET @STRING = RIGHT(@STRING, LEN(@STRING) - 1)
END
SELECT SUBSTRING(@STRING,0,PATINDEX('%,%', @STRING))
Если поле не заполнено, будет возвращено пустое поле.
Изменить: я знаю, что мог бы поместить все манипуляции со строкой в одну строку в WHILE, но решил не делать этого для удобочитаемости ... для меня это более важно, чем возможность крошечных накладных расходов в этом примере
Похожие вопросы
Связанные вопросы
Новые вопросы
sql-server
Microsoft SQL Server — это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков Microsoft SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. д.). Не используйте этот тег для вопросов по программному обеспечению и разработке мобильных устройств, если только он не связан напрямую с базой данных.