Вопрос:

Как разделить запятую значение в SQLite?

android sql sqlite

16515 просмотра

2 ответа

8313 Репутация автора

Я хочу разделить запятую Stringвнутри базы данных SQLite

Пример: у меня есть Categoryстолбец в 1 моей таблице.

|Category                      |
|------------------------------|
|Auto,A,1234444                |
|Auto,B,2345444                |
|Electronincs,Computer,33443434|

Я хочу получить только одно значение из приведенной выше строки.

value1: Auto
value2: A
value3: 1234444

Я много искал в Google; Я нашел способ заменить запятую с помощью Replace()и Trim(). Тем не менее, я хочу получить более легкий подход.

В SQL есть обеспечение SubString(). Но в SQLite такой функции нет. Как это решить?

РЕДАКТИРОВАТЬ : я проверил substr(). Но эта функция может иметь максимальную длину, чтобы получить строковое значение, а мое строковое значение не имеет фиксированной длины.

Автор: dipali Источник Размещён: 17.06.2014 08:15

Ответы (2)


-6 плюса

97 Репутация автора

Решение

пожалуйста, создайте эту функцию в вашем sqllite и передайте 2 аргумента: сначала разделитель, а вторая строка.

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
)
Автор: Harish Patel Размещён: 17.06.2014 09:32

19 плюса

740 Репутация автора

Вы можете использовать общее табличное выражение для разделения значений через запятую в SQLite.

WITH split(word, str) AS (
    -- alternatively put your query here
    -- SELECT '', category||',' FROM categories
    SELECT '', 'Auto,A,1234444'||','
    UNION ALL SELECT
    substr(str, 0, instr(str, ',')),
    substr(str, instr(str, ',')+1)
    FROM split WHERE str!=''
) SELECT word FROM split WHERE word!='';

Выход как и ожидалось:

Auto
A
1234444
Автор: user1461607 Размещён: 17.08.2015 01:03
Вопросы из категории :
32x32