Как разделить значение, разделенное запятыми, в SQLite?
Я хочу разделить запятыми String
внутри базы данных SQLite
пример: у меня есть Category
столбец в 1 моей таблицы.
|Category |
|------------------------------|
|Auto,A,1234444 |
|Auto,B,2345444 |
|Electronincs,Computer,33443434|
Я хочу получить только одно значение из строки выше.
value1: Auto
value2: A
value3: 1234444
Я искал много на Google, я нашел способ заменить запятую с помощью Replace()
и Trim()
. Тем не менее, я хочу получить более легкий подход.
в SQL, есть provide SubString()
. Но в SQLite такой функции нет. Как решить это?
редактировать: я проверил substr()
. Но эта функция может быть установлена максимальная длина, чтобы получить строковое значение, и мое строковое значение не имеет фиксированной длины.
2 ответов
пожалуйста, создайте эту функцию в своем sqllite и передайте 2 аргумента сначала seprator и вторую строку.
CREATE FUNCTION [dbo].[Split]
(
@Sep char(1)
, @S varchar(512)
)
RETURNS TABLE
AS
RETURN
(
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@Sep, @S)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@Sep, @S, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTR(@S, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS S
FROM Pieces
)
вы можете использовать общее табличное выражение для разделения разделенных запятыми значений в SQLite.
WITH split(word, str, hascomma) AS (
values('', 'Auto,A,1234444', 1)
UNION ALL SELECT
substr(str, 0,
case when instr(str, ',')
then instr(str, ',')
else length(str)+1 end),
ltrim(substr(str, instr(str, ',')), ','),
instr(str, ',')
FROM split
WHERE hascomma
)
SELECT trim(word) FROM split WHERE word!='';
выход, как ожидалось:
Auto
A
1234444