Select 查询将查看破折号左右的数字并根据这两个值执行 select 顶部
Select query that will look at digits to left and right of dash and perform a select top based on both values
这是我的 table 中列值的示例
18-0267、19-0001、19-0002、19-商店
所以我需要做的是首先将数字拆分到“-”的左边,看看这些数字是否实际上来自当前年份,例如 19 = 2019 或 18 = 2018。
在此之后,我需要获取“-”右侧的字符并检查它们是否实际上是“%[0,9]%”,如果是,我想 select Top 1 Order by DESC,但该最高值必须使当前年份生效到左侧数字。
我以为我从下面的查询中得到了它,但直到我意识到我没有检查“-”左侧的数字以确保最高值来自当前年份
所以根据上面示例中的数字,我想 return 19-0002 值但实际上我只想 return 0002 现在查询是 return输入 18-0267 的值,我得到的是 0267。
感谢任何帮助谢谢
SELECT TOP 1
RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) AS 'Name'
FROM Job
WHERE RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) LIKE '%[0-9]%'
ORDER BY Name DESC
问题是name
指的是什么。试试这个:
SELECT TOP 1 RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) AS New_Name
FROM Job j
WHERE RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) LIKE '%[0-9]%'
ORDER BY j.Name DESC;
您名为 Name
的别名与名为 Name
的列相混淆。
如果要确保右边的两列是当前年份,则需要将其包含在 WHERE
子句中:
SELECT TOP 1 RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) AS New_Name
FROM Job j
WHERE RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) LIKE '%[0-9]%' AND
DATENAME(YEAR, GETDATE()) LIKE '__' + LEFT(NAME, 2)
ORDER BY j.Name DESC;
这是一个基于前两个字符作为当前两位数年份的限制的版本:
select TOP 1 RIGHT(job.Name, CHARINDEX('-', REVERSE(job.Name)) - 1) name
from job
where job.name like left(CONVERT(VARCHAR(6), GETDATE(), 12),2) + '-[0-9]%'
order by 1 desc;
如果您在 table.
工作的未来年份,依靠 job.name 降序排序将不起作用
这是我的 table 中列值的示例 18-0267、19-0001、19-0002、19-商店
所以我需要做的是首先将数字拆分到“-”的左边,看看这些数字是否实际上来自当前年份,例如 19 = 2019 或 18 = 2018。
在此之后,我需要获取“-”右侧的字符并检查它们是否实际上是“%[0,9]%”,如果是,我想 select Top 1 Order by DESC,但该最高值必须使当前年份生效到左侧数字。
我以为我从下面的查询中得到了它,但直到我意识到我没有检查“-”左侧的数字以确保最高值来自当前年份
所以根据上面示例中的数字,我想 return 19-0002 值但实际上我只想 return 0002 现在查询是 return输入 18-0267 的值,我得到的是 0267。
感谢任何帮助谢谢
SELECT TOP 1
RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) AS 'Name'
FROM Job
WHERE RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) LIKE '%[0-9]%'
ORDER BY Name DESC
问题是name
指的是什么。试试这个:
SELECT TOP 1 RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) AS New_Name
FROM Job j
WHERE RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) LIKE '%[0-9]%'
ORDER BY j.Name DESC;
您名为 Name
的别名与名为 Name
的列相混淆。
如果要确保右边的两列是当前年份,则需要将其包含在 WHERE
子句中:
SELECT TOP 1 RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) AS New_Name
FROM Job j
WHERE RIGHT(Name, CHARINDEX('-', REVERSE(Name)) - 1) LIKE '%[0-9]%' AND
DATENAME(YEAR, GETDATE()) LIKE '__' + LEFT(NAME, 2)
ORDER BY j.Name DESC;
这是一个基于前两个字符作为当前两位数年份的限制的版本:
select TOP 1 RIGHT(job.Name, CHARINDEX('-', REVERSE(job.Name)) - 1) name
from job
where job.name like left(CONVERT(VARCHAR(6), GETDATE(), 12),2) + '-[0-9]%'
order by 1 desc;
如果您在 table.
工作的未来年份,依靠 job.name 降序排序将不起作用