精华内容
下载资源
问答
  • 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 ...

    bd96500e110b49cbb3cd949968f18be7.png

    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...

    展开全文
  • 一、汇总分析count 求某的行数sum 对某数据求和avg 求某数据的平均值max 求某数据的最大值min 求某数据的最小值二、分组group by 分组三、对分组结果指定条件having 对分组结果指定条件四、用SQL解决业务...

    一、汇总分析

    count 求某列的行数

    sum 对某列数据求和

    avg 求某列数据的平均值

    max 求某列数据的最大值

    min 求某列数据的最小值

    37326e0025dfc756d76a219062ddb7bf.png

    36ed8496e2a91c8990230520a959030c.png

    二、分组

    group by 分组

    6661e5c32c423bfb2723bef85e2e28c2.png

    70bc4476076cfb63d58cacd721967fa7.png

    363a79dc4a4830264d54c05f7b7e93ac.png

    三、对分组结果指定条件

    having 对分组结果指定条件

    6b200f09e8e3958a7a15c134b7f39cd3.png

    ed770a6fadffa1e7224c2610bc27ccb7.png

    12b602706a1f9129f265e0f87adec099.png

    四、用SQL解决业务问题

    翻译成大白话——写出分析思路——写出对应的sql句子

    efb4c9274cc812d402c3f52a2f1a4817.png

    五、对查询结果排序

    order by 对查询结果排序

    limit 从查询结果中取出指定行

    select 查询结果 from 从哪张表中查找数据 where 查询条件 group by 分组 having 对分组结果指定条件 order by 对查询结果排序 limit 从查询结果中取出指定行

    ae28cf29cee699655d6052457b464d0d.png

    9d750fcd2c2ae2a3a9caa4704c5a8545.png

    eac29d7057dfa231cc254957a6f4d4c9.png

    sqlzoo

    149af159db81797ee0d486d11d9d328a.png

    0001504ea8a4946c85473e0f4b407ea1.png

    6390a328ed896e4e5226607d0f13b633.png

    aabdaa0338918c87a9c628a9fa1e9b32.png

    8b8a68764231c46934f93bd2892ee1fa.png

    34180dc1b9695c8862722f4bef95289f.png

    0b25e72b85ece52da25fe7fc00300cca.png

    9383b84f00d16d6bae0bf059a8b0dd85.png

    97e54e85740e2ca05c643edb2f32c592.png

    905fff6d6aca3e93cebfaf4dbc970e8b.png

    b2c7675696a037c80f5f561ec43af1a9.png

    967d3ef3312edb472450d874a66d4614.png

    9c33a8d609d2d7c7f9f1f3b58e8e7dee.png

    2ba8899c1d81a3b2ac2483513760133b.png

    b192444a9b895778a7a60f8249c3d2ff.png

    5dd1c5cc3cd22ebfe600409e5238b034.png

    32de16828d40738fd7c8a013b6d20d84.png

    91926334dc8ddd5bddfce04c40bdc7dc.png

    b33a6952c7f0d38ef901af76af03d3c6.png

    e2832baed0578df747a03ea92628b420.png

    676c53125773e867c5dfd5e4b26c321f.png

    f9db7b93ec584c707dac8801cfbab3f0.png
    展开全文
  • tsql-如何在包含数字的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

    展开全文
  • 你不能这样做例如,如果你有这样的表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

    展开全文
  • SQLServer2008R2版本及以上,我们选择的都是默认安装,所以在创建数据库的时候,服务器默认选择的排序规则是一个SQL_Latin1_General_CP1_CI_AS排序规则,这样在向数据表中插入文本时,将无法正常显示,全部以”?...
  • 你不能那样做例如,如果您有这样一张桌子create table TestTable(id1 int,id3 int)如果您想在ID1和ID3之间添加另一ID2,那么下面是SQL Server在使用设计器时在场景后面所做的操作BEGIN TRANSACTIONSET QUOTED_...
  • 以下的文章主要向大家描述的是SQL Server更改排序规则的实现过程,以及在实现其实际操作过程中我们要用到的实际应用代码的描述,本文首先是以使用 ALTER TABLE 语句更改列排序规则讲起的: CREATE TABLE ...
  • 我们都知道在SqlServer中的nvarchar类型可以完美的存储诸如中文这种unicode字符,但是我们会发现有时候查询语句去查询nvarchar的时候查不出来。 为什么nvarchar类型有时候需要前面带N的字符串才能查出结果 ...
  • MS SQL Server ORDER BY子句用于根据一个或多个以升序或降序对数据进行排序。 默认情况下,一些数据库排序查询结果按升序排列。语法以下是ORDER BY子句的基本语法。SELECT column-listFROM table_name[WHERE ...
  • SQL 排序

    2018-04-15 13:44:00
     order by是按指定的的升序或降序来给查询结果排序, 它不需要查询结果中出现order by的栏位. 更改Order by里的栏位只会影响查询结果的顺序,而不影响查询出的记录总数,和每条记录的内容. ...
  • 以前用别人备份的sqlserver的srcipt在执行创建视图操作的时候,出现了如下错误, 昨天在做另一个system的batch job的时候执行一个关联语句又出现了这个错误, 第二天总结的时候发现, 要想更改DB的排序排序集的时候,...
  • load data指令 load data infile '文件的绝对路径加...而且默认分隔符是制表符’\t’当作各个之间的分割条件。当文本数据不是用制表符作为分割条件时,可以通过load data infile '文件的绝对路径加文件名' into...
  • 因此, 问题出现在数据库的排序规则不是Latin1_General_CI_AS的情况,当您移动到新的 SQL server 并将默认值设置为Latin1_General_CI_AS时, 数据库将会不可用,表、视图和用户定义表等主要组件都将受到...
  • 我有一个播放器数据库,其中播放器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:11
    SQL语法大全 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:00
    1.更改数据库的名称 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:51
    6、增加一个 7、添加和删除主键 8、索引 9、视图 10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分...
  • sql总结.doc

    2019-08-27 22:08:51
    1、 (1)索引是对数据库表中一或多进行排序的一种结构。 (2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树实现 注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立...
  • 8.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 ...
  • 8.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 ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 354
精华内容 141
关键字:

更改sql列排序