c# - 将 T-SQL 表值函数字符串拆分为 C#
问题描述
我正在尝试将 T-SQL 表值函数转换为 c# 代码。此函数通过分隔符拆分字符串。输入样本 E,U7619
有没有办法将逻辑转换为 C# 代码?
我已经尝试了几件事,但在这里发帖太可悲了。任何帮助,将不胜感激。
ALTER FUNCTION [dbo].[SplitText]
(@text VARCHAR(8000),
@delimiter CHAR(1))
RETURNS @words TABLE (objectid SMALLINT PRIMARY KEY, string VARCHAR(1000), optionalid INT)
AS
BEGIN
DECLARE @pos smallint,
@i smallint,
@j smallint,
@s varchar(255),
@o int
SET @pos = 1
WHILE @pos <= LEN(@text)
BEGIN
SET @i = CHARINDEX(' ', @text, @pos)
SET @j = CHARINDEX(@delimiter, @text, @pos)
IF @i > 0 OR @j > 0
BEGIN
IF @i = 0 OR (@j > 0 AND @j < @i)
SET @i = @j
IF @i > @pos
BEGIN
-- @i now holds the earliest delimiter in the string
SET @s = SUBSTRING(@text, @pos, @i - @pos)
SET @o = 0
IF CHARINDEX('|',@s,0) > 0
BEGIN
SET @o = SUBSTRING(@s,0,CHARINDEX('|',@s,0))
SET @s = SUBSTRING(@s,CHARINDEX('|',@s,0)+1,LEN(@s))
END
IF NOT EXISTS (SELECT 1 FROM @words WHERE [string]=@s)
BEGIN
INSERT INTO @words
VALUES (@pos, @s, @o)
END
END
SET @pos = @i + 1
WHILE @pos < LEN(@text) AND SUBSTRING(@text, @pos, 1) IN (' ', ',')
SET @pos = @pos + 1
END
ELSE
BEGIN
SET @s = SUBSTRING(@text, @pos, LEN(@text) - @pos + 1)
IF CHARINDEX('|',@s,0) > 0
BEGIN
SET @o = SUBSTRING(@s,0,CHARINDEX('|',@s,0))
SET @s = SUBSTRING(@s,CHARINDEX('|',@s,0)+1,LEN(@s))
END
IF NOT EXISTS (SELECT 1 FROM @words WHERE [string]=@s)
BEGIN
INSERT INTO @words
VALUES (@pos, @s ,@o)
END
SET @pos = LEN(@text) + 1
END
END
RETURN
END
解决方案
看起来您只是在管道上拆分数据。尝试这个:
var testdata = "test|example|splitting|words";
var foo = testdata.Split(new string[] { "|" }, StringSplitOptions.None);
推荐阅读
- sql - Postgres - 如何通过加入获得正确的计数
- gson - Gson.toJsonTree(intValue) throws Null pointer exception when trying to pass Integer parameter value
- javascript - CSS输入中的更正下划线?
- c - 如何计算和返回算法中的交换 - MergeSort 和 QuickSort?
- spring - Spring Boot - MongoDB 集成测试数据库配置更改
- bootstrap-4 - 您如何将 Bootstrap 4 轮播指示器设计为没有填充且只有圆形轮廓?
- python - 在python中,使用openCV,如何正确设置HoughCircles的maxRadius参数?
- java - 我如何知道该应用是否已从 Google Play 下载过一次
- elasticsearch - Elasticsearch + Filebeat + Logstash
- javascript - 单击时隐藏导航栏