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 降序排序将不起作用