-
tsql 更改字段排序规则_SQL Server:列排序规则对T-SQL指令的影响
2021-01-17 15:25:59SQL_Latin1_blablabla seems not to be case-sensitive, when Latin1_blablabla is. So my first question is WHY!!! And the second one is: what is the quickest trick (sp?) to change all collations for all ...I discovered(*) today that, depending on the server, my TSQL commands were case-sensitive, meaning that, when one table's column is named tableId, the following instruction might not succeed:
SELECT TableId FROM myTable
Depending on the column's collation. SQL_Latin1_blablabla seems not to be case-sensitive, when Latin1_blablabla is.
So my first question is WHY!!!
And the second one is: what is the quickest trick (sp?) to change all collations for all concerned columns in the database?
EDIT: to make things very clear:
SELECT tableId FROM myTable
Work on all servers while
SELECT TableId FROM myTable
Works only on the server with the SQL_Latin_blablabla collation. Notice the difference between the 2 strings. We are not talking here about data collation, but about the impact of this collation on the way we write code!
(*) I could use here some additional and specific word to qualify my state of mind after this 'discovery', but all of them are adult-rated ...
解决方案
Following on from marc_s
sys.objects, sys.columns etc store the column names and object names in the collation of the database. So, a binary collation means object names treated as binary...
-
sql更改某列数据_SQL:汇总分析
2020-12-09 10:49:55一、汇总分析count 求某列的行数sum 对某列数据求和avg 求某列数据的平均值max 求某列数据的最大值min 求某列数据的最小值二、分组group by 分组三、对分组结果指定条件having 对分组结果指定条件四、用SQL解决业务...一、汇总分析
count 求某列的行数
sum 对某列数据求和
avg 求某列数据的平均值
max 求某列数据的最大值
min 求某列数据的最小值
二、分组
group by 分组
三、对分组结果指定条件
having 对分组结果指定条件
四、用SQL解决业务问题
翻译成大白话——写出分析思路——写出对应的sql句子
五、对查询结果排序
order by 对查询结果排序
limit 从查询结果中取出指定行
select 查询结果 from 从哪张表中查找数据 where 查询条件 group by 分组 having 对分组结果指定条件 order by 对查询结果排序 limit 从查询结果中取出指定行
sqlzoo
-
tsql 更改字段排序规则_tsql-如何在包含数字的SQL Server中对VARCHAR列进行排序?
2021-03-07 05:08:02tsql-如何在包含数字的SQL Server中对VARCHAR列进行排序?我在SQL Server 2000数据库中有一个VARCHAR列,其中可以包含字母或数字。 这取决于在前端为客户配置应用程序的方式。当它确实包含数字时,我希望对其进行...tsql-如何在包含数字的SQL Server中对VARCHAR列进行排序?
我在SQL Server 2000数据库中有一个VARCHAR列,其中可以包含字母或数字。 这取决于在前端为客户配置应用程序的方式。
当它确实包含数字时,我希望对其进行数字排序,例如 为“ 1”,“ 2”,“ 10”,而不是“ 1”,“ 10”,“ 2”。 仅包含字母,字母和数字(例如“ A1”)的字段可以按字母顺序进行排序。 例如,这将是可接受的排序顺序。
1
2
10
A
B
B1
实现此目标的最佳方法是什么?
Tim C asked 2020-02-08T20:17:19Z
11个解决方案
74 votes
一种可能的解决方案是在数字值前加一个字符,以使所有字符都具有相同的字符串长度。
这是使用该方法的示例:
select MyColumn
from MyTable
order by
case IsNumeric(MyColumn)
when 1 then Replicate('0', 100 - Len(MyColumn)) + MyColumn
else MyColumn
end
100应该替换为该列的实际长度。
Aleris answered 2020-02-08T20:17:35Z
12 votes
有几种可能的方法可以做到这一点。
一个是
SELECT
...
ORDER BY
CASE
WHEN ISNUMERIC(value) = 1 THEN CONVERT(INT, value)
ELSE 9999999 -- or something huge
END,
value
ORDER BY的第一部分将所有内容转换为一个int(对于非数字具有巨大的价值,要排在最后),然后最后一部分负责字母。
请注意,此查询的性能可能至少对大量数据具有中等程度的影响。
Cowan answered 2020-02-08T20:18:09Z
6 votes
SELECT *, CONVERT(int, your_column) AS your_column_int
FROM your_table
ORDER BY your_column_int
要么
SELECT *, CAST(your_column AS int) AS your_column_int
FROM your_table
ORDER BY your_column_int
我认为两者都相当便携。
JohnB answered 2020-02-08T20:18:33Z
5 votes
select
Field1, Field2...
from
Table1
order by
isnumeric(Field1) desc,
case when isnumeric(Field1) = 1 then cast(Field1 as int) else null end,
Field1
这将按照您在问题中给出的顺序返回值。
在进行所有这些转换后,性能将不会太好,因此另一种方法是在表中添加另一列,在该表中存储数据的整数副本,然后按该列的顺序进行排序,然后再对相关列进行排序。 显然,这将需要对在表中插入或更新数据的逻辑进行一些更改,以填充两列。 要么,要么在表上放置触发器,以便在插入或更新数据时填充第二列。
Luke Bennett answered 2020-02-08T20:18:58Z
4 votes
我以一种非常简单的方式解决了这一问题,将其写入“订单”部分
ORDER BY (
sr.codice +0
)
ASC
这似乎工作得很好,实际上我进行了以下排序:
16079 Customer X
016082 Customer Y
16413 Customer Z
因此,正确考虑了16082前面的0。
Orz answered 2020-02-08T20:19:27Z
4 votes
您总是可以将varchar-column转换为bigint,因为整数可能太短...
select cast([yourvarchar] as BIGINT)
但您应始终注意字母字符
where ISNUMERIC([yourvarchar] +'e0') = 1
+“ e0”来自[http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/isnumeric-isint-isnumber]
这将导致您的陈述
SELECT
*
FROM
Table
ORDER BY
ISNUMERIC([yourvarchar] +'e0') DESC
, LEN([yourvarchar]) ASC
第一排序列会将数字放在最前面。第二个按长度排序,因此10将以0001开头(这是愚蠢的?!)
这导致了第二个版本:
SELECT
*
FROM
Table
ORDER BY
ISNUMERIC([yourvarchar] +'e0') DESC
, RIGHT('00000000000000000000'+[yourvarchar], 20) ASC
第二列现在正确地填充了'0',因此自然排序以正确的顺序(正确!)放置了前导零(0,01,10,0100 ...)的整数-但是所有的alpha都将以'0'进行增强 -chars(性能)
所以第三个版本:
SELECT
*
FROM
Table
ORDER BY
ISNUMERIC([yourvarchar] +'e0') DESC
, CASE WHEN ISNUMERIC([yourvarchar] +'e0') = 1
THEN RIGHT('00000000000000000000' + [yourvarchar], 20) ASC
ELSE LTRIM(RTRIM([yourvarchar]))
END ASC
现在数字首先会填充'0'字符(当然,长度20可以增加)-可以对数字进行正确排序-而字母仅会被修剪
Bernhard answered 2020-02-08T20:20:23Z
2 votes
这似乎可行:
select your_column
from your_table
order by
case when isnumeric(your_column) = 1 then your_column else 999999999 end,
your_column
Corey Trager answered 2020-02-08T20:20:43Z
0 votes
SELECT FIELD FROM TABLE
ORDER BY
isnumeric(FIELD) desc,
CASE ISNUMERIC(test)
WHEN 1 THEN CAST(CAST(test AS MONEY) AS INT)
ELSE NULL
END,
FIELD
按照此链接,您需要转换为MONEY,然后转换为INT,以避免将“ $”订购为数字。
Matt Mitchell answered 2020-02-08T20:21:03Z
0 votes
该查询对您有帮助。 在此查询中,数据类型为varchar的列按良好顺序排列。例如-在此列中,数据为:-G1,G34,G10,G3。 因此,在运行此查询后,您将看到以下结果:-G1,G10,G3,G34。
SELECT *,
(CASE WHEN ISNUMERIC(column_name) = 1 THEN 0 ELSE 1 END) IsNum
FROM table_name
ORDER BY IsNum, LEN(column_name), column_name;
Nitika Chopra answered 2020-02-08T20:21:23Z
0 votes
这可能对您有帮助,当我遇到同样的问题时,我已经尝试过了。
SELECT *
FROM tab
ORDER BY IIF(TRY_CAST(val AS INT) IS NULL, 1, 0),TRY_CAST(val AS INT);
Dennis answered 2020-02-08T20:21:47Z
-1 votes
SELECT *,
ROW_NUMBER()OVER(ORDER BY CASE WHEN ISNUMERIC (ID)=1 THEN CONVERT(NUMERIC(20,2),SUBSTRING(Id, PATINDEX('%[0-9]%', Id), LEN(Id)))END DESC)Rn ---- numerical
FROM
(
SELECT '1'Id UNION ALL
SELECT '25.20' Id UNION ALL
SELECT 'A115' Id UNION ALL
SELECT '2541' Id UNION ALL
SELECT '571.50' Id UNION ALL
SELECT '67' Id UNION ALL
SELECT 'B48' Id UNION ALL
SELECT '500' Id UNION ALL
SELECT '147.54' Id UNION ALL
SELECT 'A-100' Id
)A
ORDER BY
CASE WHEN ISNUMERIC (ID)=0 /* alphabetical sort */
THEN CASE WHEN PATINDEX('%[0-9]%', Id)=0
THEN LEFT(Id,PATINDEX('%[0-9]%',Id))
ELSE LEFT(Id,PATINDEX('%[0-9]%',Id)-1)
END
END DESC
Param Yadav answered 2020-02-08T20:22:03Z
-
tsql 更改字段排序规则_sql-server – T-SQL以特定顺序添加列
2021-01-17 15:26:00你不能这样做例如,如果你有这样的表create table TestTable(id1 int,id3 int)并且您要在id1和id3之间添加另一列id2,那么这里是使用设计器后的SQL Server在后台执行的操作BEGIN TRANSACTIONSET QUOTED_IDENTIFIER ON...你不能这样做
例如,如果你有这样的表
create table TestTable(id1 int,id3 int)
并且您要在id1和id3之间添加另一列id2,那么这里是使用设计器后的SQL Server在后台执行的操作
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
(
id1 int NULL,id2 int NULL,id3 int NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_TestTable SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
EXEC('INSERT INTO dbo.Tmp_TestTable (id1,id3)
SELECT id1,id3 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable',N'TestTable','OBJECT'
GO
COMMIT
您可以看到如果您有大量数据,这可能是有问题的,为什么列位于何处?只是使用
select col1,col2,col3 from table
-
mysql数据库修改列排序规则_更改数据库排序规则
2021-01-28 02:40:23在SQLServer2008R2版本及以上,我们选择的都是默认安装,所以在创建数据库的时候,服务器默认选择的排序规则是一个SQL_Latin1_General_CP1_CI_AS排序规则,这样在向数据表中插入文本时,将无法正常显示,全部以”?... -
tsql 更改字段排序规则_T-SQL按特定顺序添加列
2021-03-07 05:08:15你不能那样做例如,如果您有这样一张桌子create table TestTable(id1 int,id3 int)如果您想在ID1和ID3之间添加另一列ID2,那么下面是SQL Server在使用设计器时在场景后面所做的操作BEGIN TRANSACTIONSET QUOTED_... -
SQL Server更改排序规则的实现过程
2013-07-17 15:20:00以下的文章主要向大家描述的是SQL Server更改排序规则的实现过程,以及在实现其实际操作过程中我们要用到的实际应用代码的描述,本文首先是以使用 ALTER TABLE 语句更改列的排序规则讲起的: CREATE TABLE ... -
SqlServer nvarchar中的中文字符匹配,更改SqlServer实例和数据库排序规则的办法
2019-10-07 12:51:57我们都知道在SqlServer中的nvarchar类型可以完美的存储诸如中文这种unicode字符,但是我们会发现有时候查询语句去查询nvarchar列的时候查不出来。 为什么nvarchar类型有时候需要前面带N的字符串才能查出结果 ... -
tsql 更改字段排序规则_T-SQL ORDER BY子句 排序方式
2021-01-17 15:26:00MS SQL Server ORDER BY子句用于根据一个或多个列以升序或降序对数据进行排序。 默认情况下,一些数据库排序查询结果按升序排列。语法以下是ORDER BY子句的基本语法。SELECT column-listFROM table_name[WHERE ... -
SQL 排序
2018-04-15 13:44:00order by是按指定的列的升序或降序来给查询结果排序, 它不需要查询结果中出现order by的栏位. 更改Order by里的栏位只会影响查询结果的顺序,而不影响查询出的记录总数,和每条记录的内容. ... -
[SQL] SQLServer修改DB的collation, 解决排序字规则字符集问题
2018-01-26 19:16:38以前用别人备份的sqlserver的srcipt在执行创建视图操作的时候,出现了如下错误, 昨天在做另一个system的batch job的时候执行一个关联语句又出现了这个错误, 第二天总结的时候发现, 要想更改DB的排序排序集的时候,... -
MySQL中的load data、source及其更改、删除表中字段分组、排序等SQL语句、表连接
2018-12-21 23:57:28load data指令 load data infile '文件的绝对路径加...而且默认分隔符是制表符’\t’当作各个列之间的分割条件。当文本数据不是用制表符作为分割条件时,可以通过load data infile '文件的绝对路径加文件名' into... -
K2 4.7 升级 数据库排序规则更改
2018-05-11 11:26:00因此, 问题出现在数据库的排序规则不是Latin1_General_CI_AS的情况,当您移动到新的 SQL server 并将默认值设置为Latin1_General_CI_AS时, 数据库将会不可用,表列、视图和用户定义表等主要组件都将受到... -
mysql 数据库 按列重新排序存储_如何使用MySQL来按顺序排列我的数据库重新排序ID号?...
2021-03-14 20:14:03我有一个播放器数据库,其中播放器ID不连续:1 Player 12 Player 216 Player 1627 Player 2728 Player 28我想维持玩家的顺序,但要更改其ID,以使它们成为顺序的(即以1为增量递增)。可以使用SQL语句来实现吗?所需... -
SQL视图
2020-12-14 23:06:01作为视图,他不包含任何列或数据,包含的只是一个查询。 为什么使用视图? 1:重用sql语句。 2:简化复杂的sql操作。在编写查询后,可以方便的重用它而不必知道其基本查询的细节。 3:使用表的一部分而... -
Sql Server
2015-03-11 10:13:00同样的弊端,频繁更新聚集索引所在的列的话,会造成性能负担(每一次更改,都会重新排序) 非聚集索引 (什么叶节点,行定位器啊,好麻烦的...) 适用于频繁改动的列 视图 存储过程 触发器 动态SQL 行... -
postgresql sql 命令汇总
2020-12-03 10:28:31部分VI.参考 这份参考中的条目意欲提供关于相应主题的权威、完整和正式的总结。关于使用PostgreSQL的更多信息(以叙述...ALTER COLLATION— 更改一个排序规则的定义 ALTER CONVERSION— 改变一个转换的定义 ALTE... -
SQL语法大全
2014-03-30 11:00:11SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ... -
SQL各种语句、函数
2016-11-16 14:54:001.更改数据库的名称 2.表中有数据的情况下再添加列、删除列 3.在SQLServer 中各种查询语句的使用示例 4.模糊查询的语句 5.排序语句、排序并查前三名的语句 聚合函数:sum,avg,max,min,count 使用... -
SQL语句集锦.rar
2009-11-18 22:06:40多列的行转列.sql 多行补充.sql 多表对多表进行统计.txt 大小写转换.txt 子查寻和内联查寻.txt 学生名次.txt 嵌套游标的使用.txt 拷贝表格.txt 排序.txt 断开并更改数据库名称.txt 新建 文本文档 (6).txt 新建 ... -
经典SQL语句大全
2014-12-20 12:00:30注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 ... -
经典Sql语句 数据库
2011-07-07 23:13:12注:用sql语句增加列时,不用加column,删除列时要有column。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除... -
常用SQL 语句大全
2011-06-18 11:47:516、增加一个列 7、添加和删除主键 8、索引 9、视图 10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分... -
sql总结.doc
2019-08-27 22:08:511、 (1)索引是对数据库表中一列或多列进行排序的一种结构。 (2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树实现 注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立... -
深入解析SQL Server 2008(微软SQL Server开发团队必读之作)--随书源代码
2013-02-06 14:13:178.9.2 拆分/排序/折叠 375 8.9.3 合并 377 8.9.4 大范围更新计划 379 8.9.5 稀疏列更新 381 8.9.6 分区更新 381 8.9.7 锁定 384 8.10 分布式查询 385 8.11 扩展的索引 387 8.11.1 全文索引 387 ... -
深入解析SQL Server 2008(微软SQL Server开发团队必读之作)--详细书签版
2013-02-06 14:10:058.9.2 拆分/排序/折叠 375 8.9.3 合并 377 8.9.4 大范围更新计划 379 8.9.5 稀疏列更新 381 8.9.6 分区更新 381 8.9.7 锁定 384 8.10 分布式查询 385 8.11 扩展的索引 387 8.11.1 全文索引 387 ...