mysql - 用于列表的 Ms Sql 函数

标签 mysql sql

我有如下所示的 varchar 值

72,73,74

我尝试拆分为逗号,之后我想转换为 int 以上值。比我想匹配 Id 与我的用户表

CREATE FUNCTION Fn_MyFunction(@MyUserIdValues VARCHAR(100))  
RETURNS VARCHAR(300) AS  
BEGIN 

DECLARE @Result VARCHAR(300) = ''

Select UserName From UserTable
Where MyUserIdValues=UserIdValues


RETURN @Result 

@Result 必须在一列中如下所示

Joe,Michael,Ricky

我们将不胜感激。

谢谢。

最佳答案

这样做的经典方式...

/*
create table Users
(
    id int,
    name nvarchar(max)
)

insert into Users
values 
(72, 'Joe'),
(73, 'Michael'),
(74, 'Ricky'),
(75, 'Manny'),
(76, 'Bob')

*/

CREATE FUNCTION dbo.Fn_MyFunction(@IdValues VARCHAR(100))  
RETURNS NVARCHAR(max) AS  
BEGIN 
DECLARE @Result NVARCHAR(max);
DECLARE @delimiter as nchar = ',';

    WHILE LEN(@IdValues) <> 0   
    BEGIN
        Declare @CurrentId int;
        If CHARINDEX(@delimiter, @IdValues) = 0  
        begin 
            Set @CurrentId = cast(@IdValues as int);
            Set @IdValues = ''
        End   
        Else  
        begin   
            Set @CurrentId = cast(left(@IdValues,  charindex(@delimiter, @IdValues) -1)  as int)
            Set @IdValues = Substring(@IdValues,  charindex(@delimiter, @IdValues) +1, len(@IdValues))   
        End  
        select @Result = Isnull(@Result + ',', '') + Isnull((Select Name From Users Where Id=@CurrentId),'(unknown)')
   END 

RETURN @Result
END
GO

Select dbo.Fn_MyFunction('72,73,74')
--Joe,Michael,Ricky
Select dbo.Fn_MyFunction('72,0,74')
--Joe,(unknown),Ricky
Select dbo.Fn_MyFunction('72,73,72,74,74')
--Joe,Michael,Joe,Ricky,Ricky

关于mysql - 用于列表的 Ms Sql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151873/

相关文章:

MYSQL 为什么 ORDER BY DESC 失败但 ORDER BY ASC 工作?

MySQL根据两个日期列之间的结果选择行

c# - 从用户定义的类创建 SQL Server 表

php - 从数据库中的单个单元格获取多个数据

mysql - 我无法执行触发器中的两条语句

mysql - 是否可以一次插入相同的值(Mysql)?

mysql - 为什么我的查询没有显示错误,但也返回零行?

mysql - 如何使用 unix 命令在邮件中附加多个文件?

php - FuelPHP "invalid data source name"错误

mysql - 在催化剂中将多个项目添加到模型中