我有下表:
+--------+-----------------+
| Code | Input |
+--------+-----------------+
| 151821 | 687 235 563 |
| 123521 | 657 089 568 798 |
+--------+-----------------+
我希望能够做的是在SQL视图中的空格字符上拆分“输入”字符串(然后填充excel查询)以创建如下内容:
+--------+-------+
| Code | Input |
+--------+-------+
| 151821 | 687 |
| 151821 | 235 |
| 151821 | 563 |
| 123521 | 657 |
| 123521 | 089 |
| 123521 | 568 |
| 123521 | 798 |
+--------+-------+
我知道我可以在Excel级别使用空格上的SPLIT
函数进行一些VBA,但希望有可能在SQL中使用它。
答案 0 :(得分:0)
您可能必须创建一个SQL FUNCTION
或类似的东西,因为实际上没有任何内置的本机SQL方法可以执行此操作。
答案 1 :(得分:0)
我在互联网上发现这个并且已经使用它几个月来将逗号分隔值作为字符串传递并将其拆分为记录。希望你可以重做它或做类似的事情。
CREATE FUNCTION [dbo].[fn_MVParam_Split] (@RepParam nvarchar(4000), @Delim1 char(1)= ',', @Delim2 char(1)= '|')
RETURNS @Values TABLE
(
Param1 nvarchar(4000),
Param2 nvarchar(4000)
)
AS
BEGIN
DECLARE @chrind INT
DECLARE @chrind2 INT
DECLARE @Piece nvarchar(100)
DECLARE @PieceLeft nvarchar(100)
DECLARE @PieceRight nvarchar(100)
SELECT @chrind = 1
WHILE @chrind > 0
BEGIN
SELECT @chrind = CHARINDEX(@Delim1,@RepParam)
IF @chrind > 0
SELECT @Piece = LEFT(@RepParam,@chrind - 1)
ELSE
SELECT @Piece = @RepParam
SELECT @chrind2 = CHARINDEX(@Delim2,@Piece)
IF @chrind2 > 0
BEGIN
SELECT @PieceLeft = LEFT(@Piece,@chrind2 - 1)
SELECT @PieceRight = RIGHT(@Piece,LEN(@Piece) - @chrind2)
END
ELSE
BEGIN
SELECT @PieceLeft = @Piece
SELECT @PieceRight = ''
END
INSERT @Values(Param1, Param2) VALUES(CAST(@PieceLeft AS VARCHAR), CAST(@PieceRight AS VARCHAR))
SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
IF LEN(@RepParam) = 0 BREAK
END
RETURN
END