【问题标题】:how to make sql query to split database string into 3 different parts and compare them?如何进行 sql 查询将数据库字符串拆分为 3 个不同的部分并进行比较?
【发布时间】:2013-08-28 20:43:53
【问题描述】:

我想要做的是:在出生日期之后对数据库中的人进行排序(nvarchar,而不是日期类型)日期是这种字符串格式:dd-MM-yyyy 和排序,我的意思是返回所有的列表人,但在出生日期之后排序,以填充 datagridview。

我有一列包含出生日期,即 nvarchar。我想在sql查询中将日、月、年存储在3个变量中,并对其进行测试以使它们按顺序排列。

我尝试的是:

SELECT SUBSTRING(date_of_birth,0,2) FROM people AS zi;
SUBSTRING(date_of_birth,3,2) AS luna
SUBSTRING(date_of_birth,6,4) AS an
SELECT [id], [specie], [sex], [date_of_birth], [greutate] FROM [people] WHERE

但我真的不知道从现在开始如何弄清楚......

【问题讨论】:

标签: c# mysql sql database


【解决方案1】:
SELECT
  [id], [specie], [sex], [date_of_birth], [greutate],
  SUBSTRING(date_of_birth,6,4)  AS [an],
  SUBSTRING(date_of_birth,3,2)  AS [luna],
  SUBSTRING(date_of_birth,0,2)  AS [zi]
FROM
  [people]
ORDER BY
  SUBSTRING(date_of_birth,6,4),
  SUBSTRING(date_of_birth,3,2),
  SUBSTRING(date_of_birth,0,2)

许多 RDBMS 也允许这样做...

SELECT
  [id], [specie], [sex], [date_of_birth], [greutate],
  SUBSTRING(date_of_birth,6,4)  AS [an],
  SUBSTRING(date_of_birth,3,2)  AS [luna],
  SUBSTRING(date_of_birth,0,2)  AS [zi]
FROM
  [people]
ORDER BY
  [an], [luna], [zi]

【讨论】:

  • “许多 RDBMS 也允许这样做……”(是的,甚至是 MySQL)
  • 如果我想按年龄排序,会有什么变化吗?我应该计算什么或...?
  • @HoreaMihuţ - 按 DoB 排序在数学上与按年龄排序相同......年龄较大的人有更早的 DoB......
  • 我试过了,只检查年份是否排序正常,但不是。我已将您的代码准确地放入查询中。
  • @HoreaMihuţ - 您检查过您的子字符串是否正确吗? (我从你的代码中复制了它们,但我怀疑它们有点出问题了。)
【解决方案2】:

试试这个..

.

SELECT
[id], [specie], [sex], [date_of_birth], [greutate]
From
[People]
ORDER BY
Convert(DateTime, date_of_birth, 105) Asc

.

.

通过将列转换为日期时间类型 105,您可以将其转换为 'dd-MM-yyyy' 格式

按原样粘贴此代码并尝试..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 2013-10-08
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多