gpt4 book ai didi

在 SQL CE(精简版)版本 3.5 中对字母数字字段进行排序

转载 作者:行者123 更新时间:2023-12-02 03:59:41 24 4
gpt4 key购买 nike

在 SQL CE(精简版)版本 3.5 中对字母数字字段进行排序

TreeNumber 是一个 nvarchar 字段,其中混合了数字和字符串值。我想对这些记录进行排序,以便包含字母字符的记录位于顶部,其余记录按数字顺序排序。

我想要类似于以下可在 SQL Server 中运行的查询:

SELECT * FROM Tree
ORDER BY
(CASE WHEN TreeNumber LIKE '%[a-z]%' THEN 0 ELSE TreeNumber END), TreeNumber

上面的查询似乎不起作用,因为 CE 不支持 [] 范围。另一种适用于 SQL Server 但不适用于 CE 的解决方案,因为不支持“IsNumber()”,如下所示:

SELECT * FROM Tree 
ORDER BY
(CASE IsNumeric(TreeNumber) WHEN 0 THEN 0 ELSE TreeNumber END), TreeNumber

最佳答案

好吧,这个解决方案很丑陋,不适合胆小的人。我还没有在 SQL CE 上进行过测试,但它只使用基本的 t-sql,所以应该没问题。您必须创建一个 tally table (如果您不想阅读它,只需运行他的第一个代码块。它使用 tempdb,因此您需要更改它),以及一个用于保存字母表中每个字母的表(由于缺乏模式匹配)功能)。创建计数表后(您不必像示例所示一直到 11000),运行这些表,您将看到您想要的排序行为

创建字母表(用于演示目的的临时表):

select *
into #alphatable
from
(

select 'A' as alpha union all
select 'B' union all
select 'C' union all
select 'D'
--etc. etc.
) x

创建一个树表(用于演示目的的临时表):

select *
into #tree
from
(

select 'aagew' as TreeNumber union all
select '3' union all
select 'bsfreww' union all
select '1' union all
select 'xcaswf'
) x

解决办法:

select TreeNumber
from
(
select t.*, tr.*, substring(TreeNumber, case when N > len(TreeNumber) then len(TreeNumber) else N end, 1) as singleChar
from tally t
cross join #tree tr
where t.N < (select max(len(TreeNumber)) from #tree)

) z
left join
#alphatable a
on z.singlechar = a.alpha
group by TreeNumber

order by case when max(alpha) is not null then 0 else TreeNumber end

这基本上是 Moden 描述的“逐步遍历字符”的技术,然后将每个字符连接到 alpha 表上。 alpha 表中没有行的行是数字。

关于在 SQL CE(精简版)版本 3.5 中对字母数字字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4285504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com