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