相关疑难解决方法(0)

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

我们有一个大型数据库,我们有数据库端分页.这很快,在几分之一秒内从数百万条记录中返回50行的页面.

用户可以定义自己的排序,基本上选择要排序的列.列是动态的 - 一些具有数值,一些日期和一些文本.

虽然大多数按预期文本排序是愚蠢的.嗯,我说愚蠢,它对计算机有意义,但让用户感到沮丧.

例如,按字符串记录ID排序会产生如下内容:

rec1
rec10
rec14
rec2
rec20
rec3
rec4
Run Code Online (Sandbox Code Playgroud)

...等等.

我希望这个考虑到这个数字,所以:

rec1
rec2
rec3
rec4
rec10
rec14
rec20
Run Code Online (Sandbox Code Playgroud)

我无法控制输入(否则我只是在前导000中格式化)而且我不能依赖单一格式 - 有些类似于"{alpha code} - {dept code} - {rec id}".

我知道在C#中有几种方法可以做到这一点,但是不能拉下所有记录来对它们进行排序,因为这样会慢.

有谁知道在Sql server中快速应用自然排序的方法?


我们正在使用:

ROW_NUMBER() over (order by {field name} asc)
Run Code Online (Sandbox Code Playgroud)

然后我们就这样分页.

我们可以添加触发器,但我们不会.他们所有的输入都是参数化的,但是我无法改变格式 - 如果他们输入"rec2"和"rec10",他们希望它们就像那样,以自然的顺序返回.


我们有有效的用户输入,遵循不同客户的不同格式.

有人可能会去rec1,rec2,rec3,... rec100,rec101

而另一个可能会去:grp1rec1,grp1rec2,... grp20rec300,grp20rec301

当我说我们无法控制输入时,我的意思是我们不能强迫用户更改这些标准 - 它们有一个像grp1rec1的值,我不能将其重新格式化为grp01rec001,因为这会改变用于查找的内容和链接到外部系统.

这些格式变化很大,但通常是字母和数字的混合.

在C#中对它们进行排序很容易 - 只需将其分解{ "grp", 20, "rec", 301 },然后依次比较序列值.

但是,可能有数百万条记录并且数据被分页,我需要在SQL服务器上进行排序.

SQL服务器按值排序,而不是比较 - 在​​C#中我可以将值拆分为比较,但在SQL中我需要一些逻辑(非常快)获得一致排序的单个值.

@moebius - 你的答案可能会有效,但是为所有这些文本值添加排序键确实感觉像是一个丑陋的妥协.

sql-server sorting sql-server-2005 natural-sort

44
推荐指数
6
解决办法
3万
查看次数

在SQL Server中如何使用TYPE COLUMN选项创建全文索引

我有一个表定义如下

CREATE TABLE [dbo].[Dialogs](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DiscussionID] [int] NOT NULL,
    [ApprovedByUserID] [int] NULL,
    [AddedByUserID] [int] NULL,
    [Text] [nvarchar](max) NULL,
    [ApprovalStatus] [int] NULL,
    [ApprovedOn] [datetime] NULL,
    [AddedOn] [datetime] NOT NULL,
 CONSTRAINT [PK_dbo.Dialogs] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

Text列包含用户输入的html.我想创建的全文索引Text列,我还需要支持HTML过滤器,这样,当任何用户类型<div>,<p>或任何其他HTML标记则不会返回任何结果.

要创建索引我在下面使用 SQL

CREATE FULLTEXT INDEX ON [Dialogs]
 ( 
  [Text] …
Run Code Online (Sandbox Code Playgroud)

html sql-server full-text-search full-text-indexing sql-server-2012

3
推荐指数
1
解决办法
2715
查看次数

从列中删除 html 标签

我的表中有一个列,其中存储了如下段落:

<p>I like it.</p>this is my job.<main>current.</main>
Run Code Online (Sandbox Code Playgroud)

我想删除标记<p></p>, 并与所有的标签<>。所以我的预期输出将如下所示:

I like it. this is my job. current.
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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