我是SQL的新手,我在创建查询以查找表中的最后一个条目时遇到问题,其中一列包含特定字符串的一部分。我有一个类似于:
的数据库Part Number | Description | Qty
------------+-------------+-----
MO1 | Big Motor | 1
MO2 | Small Motor | 5
XYZ | Garbage | 1
BO1 | Big Bolt | 1
BO2 | Small Bolt | 2
我正在寻找一种方法来查询"部件号"以" MO"开头然后返回最后一个条目(" MO2 / Small Motor / 5"在这种情况下)。部件号始终是顺序的,但在格式正确的数字之间可能存在大量垃圾数据。我更习惯于使用Excel,我可以找到"查找"通过相反的顺序搜索字符串,但我不知道如何在SQL中执行等效操作。
答案 0 :(得分:3)
如果通过" last"你的意思是以MO
开头的最大值,那么你可以这样做:
select top 1 t.*
from t
where partnumber like 'MO%'
order by partnumber desc -- or some other column that specifies the ordering
如果数字最终看起来像MO101,那么你可以这样做:
order by len(partnumber) desc, partnumber desc
答案 1 :(得分:0)
假设您在python setup.py bdist_msi
和数字部件号之间可以有junk data
,那么这里有MO
个结尾字符的一个选项:
order by
将select top 1 *
from yourtable
where partnumber like 'mo%'
order by cast(right(partnumber, patindex('%[^0-9 ]%',reverse(partnumber)) - 1) as int) desc
与reverse
一起使用,您可以在字符串末尾获取剩余的数字字符。然后,使用patindex
right
可以轻松订购结果。
答案 2 :(得分:0)
SELECT
TOP 1 *
FROM
{TableName}
WHERE
[Part Number] LIKE '%MO%'
ORDER BY
[Part Number] DESC
零件编号始终是顺序的
按部件号反转订单并选择第一个
如果你想让'Mo'成为变量
DECLARE
@PartSearch NVARCHAR(MAX) = **'Mo'**
SELECT
TOP 1 *
FROM
{TableName}
WHERE
[Part Number] LIKE '%' + @PartSearch + '%'
ORDER BY
[Part Number] DESC