Sql server 在varchar字段上使用ORDER BY时,文本后面将排序什么字符串值
我正在处理一个包含名称列表的表(键入VARCHAR)。由于保密原因,列表中的一些名称将替换为一些文本。对于我们的一份报告,我们正在运行以下查询(名称已被替换以保护无辜者) 我不是在寻找一个新的select语句,而是为[name]单元格寻找一个可能的值,当执行此查询时,该值将导致该行被排序到列表的底部。如果我使用空字符串,它将排序到列表的顶部。如果我使用空格,它会排在列表的顶部。我甚至尝试过使用|字符,因为它的ASCII值比任何文本都高,而且它仍然排在列表的顶部 编辑:另一个标准是,由于此列表数据是公共的,所以删除这些名称不会太明显。这意味着没有“zzzzzzz”和“**机密**”价值观。寻找一些不是高喊“绝密”的东西Sql server 在varchar字段上使用ORDER BY时,文本后面将排序什么字符串值,sql-server,sql-order-by,Sql Server,Sql Order By,我正在处理一个包含名称列表的表(键入VARCHAR)。由于保密原因,列表中的一些名称将替换为一些文本。对于我们的一份报告,我们正在运行以下查询(名称已被替换以保护无辜者) 我不是在寻找一个新的select语句,而是为[name]单元格寻找一个可能的值,当执行此查询时,该值将导致该行被排序到列表的底部。如果我使用空字符串,它将排序到列表的顶部。如果我使用空格,它会排在列表的顶部。我甚至尝试过使用|字符,因为它的ASCII值比任何文本都高,而且它仍然排在列表的顶部 编辑:另一个标准是,由于此列表数据
有什么建议吗?您可以使用您喜欢的任何值,并通过语句添加到您的
订单中,以强制订购:
SELECT * from PeopleData
WHERE [location] = 'Somewhere'
ORDER BY CASE WHEN [name] = 'Protected Value' THEN 1 ELSE 0 END, Name
您可以更改CASE
语句以使用一些其他条件,如屏蔽的
标志值,而不是特定的设置值,如果您想将屏蔽的名称随机化。您想在末尾放哪一行?我理解您在这里所指的列表当然包含SELECT查询返回的所有行,那么应该始终将哪一行放在末尾?它应该取决于某些条件。用我要查找的字符串值替换名称的行。在列表末尾重复的值不是很明显吗?如果需要,您可以生成随机的假名字,或随机的首字母。@GoatCO:这是一种可能,但我正在寻找一种更便宜的解决方案。我要提到的是,我们用来访问此查询的中间件将按字段的顺序参数化。但是当我通过中间件传递您的ORDERBY子句时,它工作了。
SELECT * from PeopleData
WHERE [location] = 'Somewhere'
ORDER BY CASE WHEN [name] = 'Protected Value' THEN 1 ELSE 0 END, Name