Sql server sql server中的子字符串
我有一个字符串的格式。(如902.5)Sql server sql server中的子字符串,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一个字符串的格式。(如902.5) 需要在SQLServer2008中将其拆分并收集到单独的变量中 DECLARE @Core VARCHAR(10)='902.5', @OrgNumber VARCHAR(6) = NULL, @DeptNumber VARCHAR(2) = NULL IF (NULLIF(@Core, '')) IS NOT NULL BEGIN S
需要在SQLServer2008中将其拆分并收集到单独的变量中
DECLARE
@Core VARCHAR(10)='902.5',
@OrgNumber VARCHAR(6) = NULL,
@DeptNumber VARCHAR(2) = NULL
IF (NULLIF(@Core, '')) IS NOT NULL
BEGIN
SELECT @OrgNumber =SUBSTRING(@Core, 1, CHARINDEX('.', @Core) - 1),
@DeptNumber =SUBSTRING(@Core, CHARINDEX('.', @Core) + 1, LEN(@Core))
SELECT @OrgNumber = upper(nullif(ltrim(nullif(rtrim(@OrgNumber ), '')), '')),
@DeptNumber = nullif(ltrim(nullif(rtrim(@DeptNumber ), '')), '')
END
但是,这不适用于仅包含组织参考(无部门参考)的情况,例如902如何在同一语句中优雅地处理大小写?使用
PARSENAME
函数
DECLARE @Core VARCHAR(50)= '902.2'
SELECT Parsename(@Core, CASE WHEN Charindex('.', @Core) > 0 THEN 2 ELSE 1 END) AS OrgNumber,
Parsename(@Core, CASE WHEN Charindex('.', @Core) > 0 THEN 1 ELSE 2 END) AS DeptNumber
已更新您的查询。另外,请注意,
IF(NULLIF(@Core,”)不是NULL
是不正确的
DECLARE @Core VARCHAR(10)='902',
@OrgNumber VARCHAR(6) = NULL,
@DeptNumber VARCHAR(2) = NULL
IF @Core IS NOT NULL
BEGIN
SELECT @OrgNumber = CASE
WHEN Charindex('.', @Core) > 0 THEN
Substring(@Core, 1, Charindex('.', @Core)
- 1)
ELSE Substring(@Core, 1, Len(@Core))
END,
@DeptNumber = CASE
WHEN Charindex('.', @Core) > 0 THEN
Substring(@Core,
Charindex('.', @Core) + 1
, Len(@Core))
ELSE NULL
END
SELECT @OrgNumber = Upper(NULLIF(Ltrim(NULLIF(Rtrim(@OrgNumber), '')), '')
),
@DeptNumber = NULLIF(Ltrim(NULLIF(Rtrim(@DeptNumber), '')), '')
END
SELECT @OrgNumber,
@DeptNumber
它总是相同的格式吗?是的-它将始终是x.y,或者只是XParName从右到左工作-如果缺少分隔符“.”,它会将组织编号分配给dept ref。