sql - 字符串到行的转换 SQL Server
问题描述
我们如何将以下输入转换为 SQL Server 中的一行?
'e4lu50', 'e4lu10', 'e4lu11', 'e4de11', 'e4de12', 'e4nl51', 'e4es11'
预期产出
e4lu50
e4lu10
e4lu11
e4de11
e4de12
e4nl51
e4es11
我有一个功能
CREATE FUNCTION [dbo].[BreakStringIntoRows]
(@CommadelimitedString VARCHAR(1000))
RETURNS
@Result TABLE (Column1 INT)
AS
BEGIN
DECLARE @IntLocation INT
WHILE (CHARINDEX(',', @CommadelimitedString, 0) > 0)
BEGIN
SET @IntLocation = CHARINDEX(',', @CommadelimitedString, 0)
INSERT INTO @Result (Column1)
--LTRIM and RTRIM to ensure blank spaces are removed
SELECT
RTRIM(LTRIM(SUBSTRING(@CommadelimitedString, 0, @IntLocation)))
SET @CommadelimitedString = STUFF(@CommadelimitedString, 1, @IntLocation, '')
END
INSERT INTO @Result (Column1)
SELECT RTRIM(LTRIM(@CommadelimitedString))--LTRIM and RTRIM to ensure blank spaces are removed
RETURN
END
和一个查询,但问题是它不接受带引号的输入
WITH SEG(aa) AS
(
SELECT
BreakStringIntoRows ('e4lu50', 'e4lu10', 'e4lu11', 'e4de11',
'e4de12', 'e4nl51', 'e4es11', 'e4it11')
)
SELECT *
FROM SEG
解决方案
你没有一个字符串,你有一组用逗号分隔的 8 个字符串。如果您想坚持自己的功能,请将其称为:
with SEG(aa) as
(select BreakStringIntoRows ('e4lu50,e4lu10,e4lu11,e4de11,e4de12,e4nl51,e4es11')
SELECT * from SEG
由于您直接在查询中指定字符串,这可行吗?如果没有,请在调用之前使用 REPLACE() 函数去除引号。
推荐阅读
- .net - 如何在每个字段中使用读写器锁
- javascript - 我们如何以不同的格式显示时区?
- asp.net-core - 通过 AuthorizationHandler 访问绑定模型
- primefaces - Primefaces 7.0 旧库的替代品?
- javascript - AngularJs $q.all 不适用于 for 循环
- django - 如何修复关键错误:在 django 中使用 woocommerce api 时出现“x-wp-totalpages”
- java - 使用 Jacoco 创建名为“liquibase”的 bean 时出错
- javascript - 从两个数组中找到不同的值
- python - 从输入列表中提取字段 A 以在字段 B 上排序
- arrays - 保存数组,从刀片到控制器 Laravel