Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 使用XML验证Excel并移动到SQL Server目标_Tsql - Fatal编程技术网

Tsql 使用XML验证Excel并移动到SQL Server目标

Tsql 使用XML验证Excel并移动到SQL Server目标,tsql,Tsql,是否有内置函数(与UDF相反),或者有人可以提供示例代码,在遇到字符时将字符串拆分为两列? 样本: 1234:abcd 将上面的字符串拆分为1234和abcd两列试试这个。它并不漂亮,但会生成两列(假设:始终是分隔符): 换句话说,它不是内置函数,而是内联sql代码。标题/标记不匹配 对于Excel,如果A1包含以下值: 使B1=LEFT(A1,IF(iError(FIND(“:”,A1)),LEN(A1),FIND(“:”,A1)-1)) 使C1=RIGHT(A1,IF(iError(FIND

是否有内置函数(与UDF相反),或者有人可以提供示例代码,在遇到字符时将字符串拆分为两列? 样本:

1234:abcd


将上面的字符串拆分为1234和abcd两列

试试这个。它并不漂亮,但会生成两列(假设:始终是分隔符):

换句话说,它不是内置函数,而是内联sql代码。

标题/标记不匹配

对于Excel,如果
A1
包含以下值:

使
B1
=LEFT(A1,IF(iError(FIND(“:”,A1)),LEN(A1),FIND(“:”,A1)-1))

使
C1
=RIGHT(A1,IF(iError(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

总是有冒号吗?它是否被丢弃,以致于它不在两列中?是否有字母总是出现在冒号后面?如果你在这里通过编辑你的问题来展示所有可能组合的例子,这可能会很有帮助。我正在寻找一个简单的tsql语句。你的建议很有帮助。非常感谢。
;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