标签: natural-sort

如何在没有 RawSQL 的情况下在 Django 中创建和访问正则表达式捕获组?

如何在不使用 RawSQL 的情况下使用 Regex 捕获组注释 Django 查询集,以便以后可以使用该值进行过滤和排序?

例如,在 PostgreSQL 中,我可以进行以下查询:

CREATE TABLE foo (id varchar(100));

INSERT INTO foo (id) VALUES ('disk1'), ('disk10'), ('disk2');

SELECT
    "foo"."id",
    CAST((regexp_matches("foo"."id", '^(.*\D)([0-9]*)$'))[2] AS integer) as grp2
FROM "foo"
ORDER BY "grp2"
Run Code Online (Sandbox Code Playgroud)

数据库小提琴

regex sql django natural-sort

8
推荐指数
2
解决办法
541
查看次数

为什么在natsort/strnatcmp/strnatcasecmp中忽略空格?

strnatcmp在比较函数中用于对表中的人名进行排序.对于我们的比利时客户,我们得到了一些奇怪的结果.他们的名字有'Van der Broecke'和'Vander Veere',然后strnatcasecmp("Van der", "Vander")回归0!

由于自然比较的目的是按照人类的意愿进行排序,我不明白为什么空间被完全忽视.

例如:

$names = array("Van de broecke", "Vander Veere", "Vande Muizen", "Vander Zoeker", "Van der Programma", "vande Huizen", "vande Kluizen", "vander Muizen", "Van der Luizen");
natcasesort($names);

print_r($names);
Run Code Online (Sandbox Code Playgroud)

得到:

Array ( 
[0] => Van de broecke 
[5] => vande Huizen 
[6] => vande Kluizen 
[2] => Vande Muizen 
[8] => Van der Luizen 
[7] => vander Muizen 
[4] => Van der Programma 
[1] => Vander Veere 
[3] => Vander …
Run Code Online (Sandbox Code Playgroud)

php natural-sort natsort

7
推荐指数
1
解决办法
844
查看次数

如何在PostgreSQL中对包含单词和数字的VARCHAR列进行排序?

我需要使用varchar列来命令选择查询,使用数字和文本顺序.查询将在java程序中完成,使用jdbc over postgresql.

如果我ORDER BY在select子句中使用,我会得到:

1
11
2
abc
Run Code Online (Sandbox Code Playgroud)

但是,我需要获得:

1
2
11
abc
Run Code Online (Sandbox Code Playgroud)

问题是该列还可以包含文本.

这个问题类似(但针对SQL Server):

如何在SQL Server中对包含单词和数字的VARCHAR列进行排序?

但是,提出的解决方案不适用于PostgreSQL.

在此先感谢,问候,

sql postgresql jdbc natural-sort

6
推荐指数
2
解决办法
9605
查看次数

UCA +自然分选

我最近了解到PHP已经通过intl扩展支持Unicode Collat​​ion算法:

$array = array
(
    'al', 'be',
    'Alpha', 'Beta',
    'Álpha', 'Àlpha', 'Älpha',
    '????',
    'img10.png', 'img12.png',
    'img1.png', 'img2.png',
);

if (extension_loaded('intl') === true)
{
    collator_asort(collator_create('root'), $array);
}

Array
(
    [0] => al
    [2] => Alpha
    [4] => Álpha
    [5] => Àlpha
    [6] => Älpha
    [1] => be
    [3] => Beta
    [11] => img1.png
    [9] => img10.png
    [8] => img12.png
    [10] => img2.png
    [7] => ????
)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,即使使用混合大小写字符串,这似乎也能完美运行!到目前为止我遇到的唯一缺点是没有对自然排序的支持,我想知道解决这个问题的最佳方法是什么,这样我就可以合并两个世界中最好的一个.

我试图指定Collator::SORT_NUMERIC排序标志,但结果更加混乱:

collator_asort(collator_create('root'), $array, Collator::SORT_NUMERIC);

Array …
Run Code Online (Sandbox Code Playgroud)

php sorting unicode natural-sort

6
推荐指数
1
解决办法
654
查看次数

结合字母和自然顺序(又名用户理智排序)

我认为这很容易找到premade,但似乎我在网上找到的任何解决方案只能解决部分问题.

我想对用户提供的文件名列表(文件大多以人和/或地址命名),有时用不同的语言(大多数是德语,有点法语和意大利语混合在一起) ,很少有任何其他西方语言).

我们的想法是以(德国)用户普遍认为理智的方式呈现此列表.这意味着顺序应该遵循Locale.GERMANjava.text.Collat​​or,但同时期望是对字符串中的数字进行异常,因此"10"在"2"之后.

我找到了在网上进行自然排序的代码,但它依赖于逐字符比较(而Collat​​or不支持).我可以使用子字符串来破解某些内容,但在比较器内部,我认为在每次比较调用时创建多个子字符串并不是最明智的想法.

任何想法如何有效地实现这一点(在执行时间和实现时间),或者更好的是经过测试和随时可用的实现?

java sorting collation natural-sort

6
推荐指数
2
解决办法
1467
查看次数

使用比较运算符比较postgres中的字符串?

在许多编程语言中,您可以使用>,> =,<etc等运算符来比较字符串,并且语言将基于字母表中字母位置的比较.

例如在PHP中

if ('a' < 'b') {
    echo 'Yes';
} else {
    echo 'No';
}
> Yes
Run Code Online (Sandbox Code Playgroud)

但是在postgres或mysql中

SELECT
CASE WHEN 'a' < 'b' THEN 'yes' END
FROM table
Output: null
Run Code Online (Sandbox Code Playgroud)

我有一个包含字符串的表,我需要通过SQL相互比较.

例如:6.2(5a)6.2(5b) - 这将大于6.2(5a)或6.2(15) - 这将大于6.2(5a)

我想过使用正则表达式给一个字母分配一个数字但是当没有字母时这会打破比较.

你会如何在SQL中纯粹地解决这个问题?

postgresql natural-sort

6
推荐指数
1
解决办法
2万
查看次数

Django Queryset上的自然排序

我正在开发一个系统,该系统列出了按产品代码分类的一系列产品。产品代码由两个字母组成,后跟一个数字,例如EG1。

我目前通过简单的方式对这些产品进行分类

Product.objects.order_by('product_code')

但是,由于可以有多个数字的产品代码(例如EG12),因此它们将比单个数字的代码高出一些。即EG1,EG11,EG12,EG13 ... EG19,EG2,EG20等

我知道在产品代码中添加前导零将解决此问题(即EG01而不是EG1),但是由于已经有印刷文献,并且现有站点使用EG1,因此这不是一个选择。

有没有一种方法可以解决此问题,以正确的顺序显示这些产品?

python django natural-sort

6
推荐指数
1
解决办法
1299
查看次数

Microsoft SQL Server中的自然(人类字母数字)排序

感谢您花时间阅读所有这些,很多!感谢所有爱好者!

如何自然排序?

即.命令一组字母数字数据显示为:

Season 1, Season 2, Season 10, Season 20
Run Code Online (Sandbox Code Playgroud)

代替

Season 1, Season 10, Season 2, Season 20
Run Code Online (Sandbox Code Playgroud)

我以非常实用的格式使用一个非常实用的电视季节示例作为案例.

我希望完成以下任务:

  1. 与他人分享我的工作解决方案
  2. 请求您的帮助,以确定如何缩短它(或找到更好的解决方案)到我的解决方案
  3. 你能解决下面的标准7吗?

我花了大约2个小时在线研究,另外3个小时建立了这个解决方案.一些参考资料来自:

在SO和其他站点上找到的一些解决方案仅适用于90%的案例.但是,如果文本中有多个数值,则大多数/全部都不起作用,或者如果文本中根本没有找到数字,则会导致SQL错误.

我创建了这个SQLFiddle链接来玩(包括以下所有代码).

这是create语句:

create table tvseason
(
    title varchar(100)
);

insert into tvseason (title)
values ('100 Season 03'), ('100 Season 1'),
       ('100 Season 10'), ('100 Season 2'),
       ('100 Season 4'), ('Show Season 1 (2008)'),
       ('Show Season 2 (2008)'), ('Show Season 10 (2008)'),
       ('Another Season 01'), …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sorting natural-sort

6
推荐指数
2
解决办法
506
查看次数

Delphi中是否存在区分大小写的自然排序功能?

我想订购一个包含不同选项的字符串列表.选项包括:

  1. 按字母顺序排序或逻辑排序
  2. 区分大小写或不区分大小写
  3. 升序或降序

我有所有分支机构除外:

区分大小写,逻辑排序.
(非常多来自php的NatSort)

现在我正在尝试找到一个能够满足我需要的功能.

为了得到一个不区分大小写的逻辑顺序,我实现了对shlwapi.dll中的StrCmpLogicalW-Function的调用

https://docs.microsoft.com/en-us/windows/desktop/api/shlwapi/nf-shlwapi-strcmplogicalw

但是,我找不到与StrCmpLogicalW等效的区分大小写.

我复制了一个看起来很有希望从另一个在线棋盘上玩的功能,并且使用Flags.

原始功能:

  function NatCompareText(const S1, S2: WideString): Integer;
  begin
    SetLastError(0);
    Result:=CompareStringW(LOCALE_USER_DEFAULT,
                           NORM_IGNORECASE or
                           NORM_IGNORENONSPACE or
                           NORM_IGNORESYMBOLS,
                           PWideChar(S1),
                           Length(S1),
                           PWideChar(S2),
                           Length(S2)) - 2;
    case GetLastError of
      0: ;
      //some ErrorCode-Handling
    else
      RaiseLastOSError;
    end;
  end; 
Run Code Online (Sandbox Code Playgroud)

来自:https: //www.delphipraxis.net/29910-natuerliche-sortierungen-von-strings.html

我试图删除Ignore-Case标志,但无济于事.

这就是我想要的结果:http: //php.fnlist.com/array/natsort

   Input:   array("Img12.png", "iMg10.png", "Img2.png", "Img1.png")
   Output:  array("Img1.png", "Img2.png", "Img12.png", "iMg10.png")
Run Code Online (Sandbox Code Playgroud)

而不是:http: //php.fnlist.com/array/natcasesort

   Input:   array("Img12.png", "iMg10.png", "Img2.png", "Img1.png")
   Output:  array("Img1.png", "Img2.png", "iMg10.png", "Img12.png")
Run Code Online (Sandbox Code Playgroud)

更新:

我已经为区分大小写的自然分类完成了第一个非常简单的解决方案.

我这样做的原因是因为我想在多个列上对Stringgrid进行排序,并为每个指定的列提供不同的选项. …

delphi case-sensitive natural-sort delphi-7

6
推荐指数
1
解决办法
408
查看次数

使用split_part后在空字段中替换值

我有两列,id integerversion text.我试图将字符串转换version为整数,以便我可以选择id的最大(最新)版本.

但是,id商店本身的第一个实例为version.例:

id | version
---+--------
10 | '10'
Run Code Online (Sandbox Code Playgroud)

而不是:

id | version
---+--------
10 | '10-0'
Run Code Online (Sandbox Code Playgroud)

其他行遵循约定ID:10,版本:10-1.等等.

我怎么能做到这一点?我已经尝试split_part()并施展为int.但是,split_part(version, "-", 2)将返回看起来像空字符串的内容.我尝试使用a COALESCE(splitpart..., '0')无效,因为它试图读取字段索引2返回的空字段.

sql postgresql split natural-sort

5
推荐指数
1
解决办法
609
查看次数