Sql Query用于选择逗号前后的值
有一个名为employee的表,有3个字段..Id,Name,Departmentid 在DepartmentId中,它由3个id 201,301,401组成。
从此想要执行
Select * from employee where DepartmentId =301
答案 0 :(得分:0)
SELECT * FROM EMPLOYEE WHERE DEPARTMENTID LIKE '%301%'
即使它有效,我也不会真正了解您的数据库设计方式以及您需要逗号的原因
答案 1 :(得分:0)
您可以使用. . .
where parsename(replace(DepartmentId, ',', '.'), 2) = 301;
功能:
like
但. . .
where DepartmentId LIKE '%301%';
谓词也很有用:
public static void main(String[] a) throws Throwable {
final String extension = "png";
final String input = "input1.png";
final String output = "output1.png";
final int threadsAmount = 4;
long startTime = System.currentTimeMillis();
final Image image = new Image(input, output, extension);
image.applyMedian(threadsAmount);
long duration = System.currentTimeMillis() - startTime;
System.out.println("duration: " + duration);
}
答案 2 :(得分:0)
如果你总是希望匹配中间的数字,这将有效,例如:在你的例子中301
。
SELECT *
FROM employee
WHERE
SUBSTRING (
DepartmentId,
CHARINDEX(',', DepartmentId, 0) + 1,
CHARINDEX(',', DepartmentId, CHARINDEX(',', DepartmentId, 0) + 1) - CHARINDEX(',', DepartmentId, 0) - 1
) = '301'
如果301
可以位于该字段中的任何位置,那么您只需使用LIKE
SELECT *
FROM employee
WHERE DepartmentId LIKE '%301%'
答案 3 :(得分:0)
逗号分隔列是反模式。您希望规范部门。
但是,这是一种方法:
select * from employee
where '301' in (SELECT value FROM STRING_SPLIT(department, ','))
答案 4 :(得分:0)
如果您有像1301或3011这样的部门,那么简单的LIKE可能会失败
请检查以下SQL代码
select * from employees where ','+departmentid+',' like '%,301,%'
其他选项是将departmentid列拆分为每个单独的部门ID值列表
如果您在SQL Server 2016之前有SQL Server,那么您需要自己的客户SQL string split function。 然后您可以使用以下SQL查询
select e.*
from employees as e
cross apply dbo.split(departmentid,',') as s
where s.val = '301'
如果您正在使用SQL Server 2016或SQL Server 2017,则可以在CROSS APPLY查询中再次使用string_split内置SQL函数
SELECT e.*
FROM employees as e
CROSS APPLY STRING_SPLIT(departmentid, ',')
WHERE value = '301'
最后一种方法可以使用SQL XML query将逗号分隔列表修改为XML数据,如下所示
select
Id, Name, sqlXML.value('.','varchar(5)') as DepId
from (
SELECT
Id, Name,
convert(xml, '<root><t>' + REPLACE(Departmentid, ',', '</t><t>') + '</t></root>') as dlist
FROM employees
) tbl
CROSS APPLY dlist.nodes('/root/t') as XMLData(sqlXML)
WHERE sqlXML.value('.','varchar(5)') = '301'