mysql的新手,

我有一张这样的桌子。

___|____
Id           |    name
1            |       a
2            |       b
3            |       c
4            |       A
5            |       B
6            |       C

在sql中获取这样的结果的查询将是什么

___|____
Id           |    name
4            |       A
1            |       a
5            |       B
2            |       b
6            |       C
3            |       c

#1楼 票数:2 已采纳

已编辑

这似乎是将DDS想法转变为适用于所有MySQL版本的更通用的最简单方法。

询问

SELECT 
   id
 , name
FROM 
 Table1
ORDER BY 
  CASE
    WHEN name COLLATE latin1_bin BETWEEN 'A' AND 'Z'
    THEN ASCII(name) + 31
    ELSE ASCII(name)
   END

结果

| id  | name |
| --- | ---- |
| 4   | A    |
| 1   | a    |
| 5   | B    |
| 2   | b    |
| 6   | C    |
| 3   | c    |

在数据库小提琴上查看

解释视图,以便您可以看到DB Fiddle发生的情况

或更稳定的一种,因为为calculated_ascii_value列生成的唯一值。 解释视图,以便您可以看到DB Fiddle发生的情况

另一个查询非常复杂。

询问

SELECT 
    Table1.id
  , Table1.name 
FROM (

SELECT 
 DISTINCT
   (
     SUBSTRING_INDEX(SUBSTRING_INDEX(@orderList, ',', number_generator.number), ',', -1)
     COLLATE utf8mb4_bin
   ) AS letter
FROM (

SELECT
 (@number := @number + 1) AS number
FROM (
 SELECT 1 AS number UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10
) AS row_1
CROSS JOIN (
 SELECT 1 AS number UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
) AS row_2
CROSS JOIN (SELECT @number := 0) AS init_user_param 

) AS number_generator
CROSS JOIN (SELECT @orderList := 'A,a,B,b,C,c' /* add all to Z,z */) AS init_user_param

) AS letters
INNER JOIN
 Table1
ON
 letters.letter = Table1.name
;

结果

| id  | name |
| --- | ---- |
| 4   | A    |
| 1   | a    |
| 5   | B    |
| 2   | b    |
| 6   | C    |
| 3   | c    |

在数据库小提琴上查看

请注意,您应该了解一些事情

当您的MySQL使用utf8字符集时, COLLATE utf8mb4_bin可能会改为COLLATE utf8_bin

SELECT @orderList := 'A,a,B,b,C,c' /* add all to Z,z */您可能需要添加更多内容到Z,z

#2楼 票数:0

这将使新列“ newid”具有您所需的顺序

select newid = row_number() over (order by case when val between 'A' and 'Z' 
                                          then  ascii(val) -31 
                                          else ascii(val) end), *

from yourtable

#3楼 票数:0

尝试这样。 我刚从w3schools使用数据库,需要检查MySql是否工作。

SELECT * FROM myTable GROUP BY name ORDER BY UPPER(name), LOWER(name);

  ask by Karthikeyan T translate from so

未解决问题?本站智能推荐:

3回复

php查询(小写/大写字母)验证

我需要有关查询字符串的mysql选择结果。 让我们的字符串为: Z和z (大写和小写) 数据库的样子: 好的,在地址栏中输入:localhost / z该查询总是选择1个结果,第一个,因此它总是返回1。 test_char是varchar。 如何使Z和z选择不同的结果?
3回复

如何将捷克“ch”字母存储在mysql中以及如何使用substr获取它?

甚至“ch”显示为两个字母,在捷克语中它被视为一个字母,其字母顺序在H字母后面(因此正确的顺序是a,b,c,d,e,f,g,h,ch,i, j(我跳过了一些国家字符)。但是当我在包含单词的列上执行substr(colname,1,1)时,我只得到“C” 这个sql:SELECT SUBSTR
4回复

如何在不区分大小写的MySQL数据库上执行区分大小写的搜索?

在我的数据库utf8_general_ci ,99.99%的搜索应该是不区分大小写的。 现在有一个特定的情况,我需要以区分大小写的方式查找一些数据。 该字段是varchar字段,我通常搜索不区分大小写。 我的问题是:我可以对通常不区分大小写的字段执行区分大小写的搜索吗?
2回复

MySQL查询选择像变音符号土耳其字母

我有一个土耳其语的令牌表; 它的默认排序规则是utf8_general_ci在FreeBSD服务器上,mysql版本是5.6.15 我想查询; 要么 对于这些查询,结果必须是“âm”的唯一值(在土耳其语中也表示“ blind”),但是我有四个原始结果; 那不是我想要的。 我
1回复

如何使MySql表数据区分大小写?

我想在 MySql 表的主键字段中输入关于区分大小写的数据。 但默认情况下,它不考虑表数据的区分大小写。 这是我的查询。 我也在创建表时尝试了排序规则,但没有按要求获得结果。 任何人都可以建议必须使用哪种排序规则或任何其他技术来使表的列域区分大小写。
1回复

如何在MySQL中使用重音创建索引

我有一个使用phpMyAdmin管理的数据库。 我有一张桌子来保存verb tense和verb 。 看起来像这样: 我创建了索引并使其具有更快的访问权限: 这样做的目的是在动词及其所有动词时态( form )之间建立关联,但是当我尝试插入带有重音的对( form , verb )时
7回复

MySQL将latin1数据转换为UTF8

我使用LOAD DATA INFILE将一些数据导入MySQL数据库。 表本身和列使用UTF8字符集,但数据库的默认字符集是latin 1.因为数据库的默认字符类型是latin1,并且我使用了LOAD DATA INFILE而没有指定字符集,所以它被解释文件为latin1,即使文件中的数据是U
1回复

MySQL错误代码:1054。“字段列表”中的未知列“字段名”

我有一个很可能很容易解决的问题,但是我还没有找到重复的问题。 我有一个简单的表,该表具有零个键和任何类型的零约束,但是如果不从表结构中复制并粘贴名称,就无法选择列。 我在下面的图片中显示了我运行了两个查询,并且两者的列名相同。 第一次尝试输入列名称,第二次尝试从下面信息面板的表结构中复制