Как разделить значение, разделенное запятыми, в 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