Проверка Excel с использованием XML и переход к месту назначения SQL Server - PullRequest
2 голосов
/ 07 июня 2011

Есть ли встроенная функция (в отличие от UDF) или кто-то может предоставить пример кода для разделения строки на два столбца, когда встречается символ? Пример:

1234: ABCD

разбить вышеуказанную строку на 1234 и abcd на два столбца

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Попробуй с этим. Это не красиво, но он производит два столбца (при условии: всегда делитель):

declare @test varchar(20)
set @test = '1234:abcd'

select 
    leftcol = left(@test,charindex(':',@test)-1),
    rightcol = right(@test,len(@test) - charindex(':',@test))

Другими словами, это не встроенная функция, а встроенный SQL-код.

0 голосов
/ 07 июня 2011

Несоответствие заголовка / тега?

Для Excel, если A1 содержит значение:

Марка B1 =LEFT(A1,IF(ISERROR(FIND(":",A1)),LEN(A1),FIND(":",A1)-1))
сделать C1 =RIGHT(A1,IF(ISERROR(FIND(":",A1)),0,LEN(A1)-FIND(":",A1)))

Или для T-SQL + строковая переменная;

DECLARE @F VARCHAR(64) = '1234:ABCD'

IF @F LIKE '%:%' 
    SELECT SUBSTRING(@F, 1, CHARINDEX(':', @F, 1) - 1) AS COL1, 
            SUBSTRING(@F, CHARINDEX(':', @F, 1) + 1, LEN(@F)) AS COL2
ELSE
    SELECT @F AS COL1, NULL AS COL2

для выбора;

;WITH faketable (fld) AS (
    SELECT 'aaa:123' as fld
    UNION SELECT 'ddddd'
)
SELECT 
    CASE WHEN fld LIKE '%:%' THEN SUBSTRING(fld, 1, CHARINDEX(':', fld, 1) - 1) ELSE fld END AS COL1 ,
    CASE WHEN fld LIKE '%:%' THEN SUBSTRING(fld, CHARINDEX(':', fld, 1) + 1, LEN(fld)) ELSE NULL END AS COL2 
FROM faketable

>COL1   COL2
>aaa    123
>ddddd  NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...