【问题标题】:SELECT statement by looking at certain character of numeric value in Oracle通过查看 Oracle 中数值的某些字符来选择语句
【发布时间】:2015-02-17 17:46:35
【问题描述】:

第一次发帖。请放轻松。 :)

在我的 Oracle 数据库中,我有一个名为 fun_table 的表。它包含一个名为FIRSTCOLUMN 的列。此列仅包含六位纯数字值。以下是当前fun_table 中的行:

FIRSTCOLUMN
-----------
201502
201503
201601

我想从 fun_table 中编写一个 SELECT 语句,其中只有第六位不是“1”的值。而且由于随后每年的数据都将遵循这种格式(201602、201603、201701 等),我不相信我希望简单地忽略第六个字符为“1”的值.

这有意义吗?这可以作为 SQL 中的 SELECT 语句吗?

谢谢!

【问题讨论】:

  • 不,没有任何意义。您想要除一月之外的所有月份吗?
  • 感谢您的回复。这些值中的第六位数字不对应于一年中的第 1-12 个月,没有。不过,他们每年都以这种简单的形式重复;每年,我们都会看到重复的第六个值是 1、2 和 3。所以明年这个时候,我们会看到以下数据:201502,201503,201601,201602,201603,201701有帮助吗?
  • 试试select firstcolumn from table where to_char(firstcolumn) like '%1';
  • 如果它是数字,那么您可以使用模 10 运算。这不是 Oracle 上的 MOD(firstcolumn, 10) <> 1 吗?
  • 您的第一列看起来像日期。您可以将这些数字转换为日期,然后将日期与年份和月份分开,或者您可以使用提取,然后选择所有月份 > 1 的地方。如果您需要示例,请告诉我。

标签: sql oracle select


【解决方案1】:

你有点让我困惑,但这里是:

我想从 fun_table 中编写一个 SELECT 语句,其中只有第六位不是“1”的值。

DDL/DML 示例:

create table fun_table (FIRSTCOLUMN INTEGER);
INSERT INTO FUN_TABLE (FIRSTCOLUMN) VALUES (201502);
INSERT INTO FUN_TABLE (FIRSTCOLUMN) VALUES (201503);
INSERT INTO FUN_TABLE (FIRSTCOLUMN) VALUES (201601);
COMMIT;

查询示例:

select *
from fun_table
where substr(firstcolumn,6) <> '1'
;

注意:您可以在那里使用'1'1,但使用1 会使用隐式类型转换。
输出:

201502
201503

现在说到这部分:

我不认为我希望简单地忽略第六个字符为“1”的值。

我真的不明白你的意思。如果您详细说明,我将扩展我的答案。

【讨论】:

  • mmmmmpie,就是这样!这就是我想要的输出——只输出 201502 和 201503。你可以忽略我原来问题的最后一部分。这可能甚至不必提及。我相信这对你来说很简单,但这对我帮助很大。现在确保它适用于我的其余任务。
【解决方案2】:
SELECT firstcolumn FROM fun_table WHERE MOD(firstcolumn, 10) <> 1

【讨论】:

  • 也谢谢你,shawnt00。
猜你喜欢
  • 2011-05-24
  • 2010-12-03
  • 1970-01-01
  • 2015-01-28
  • 2022-07-07
  • 2011-10-28
  • 2020-10-01
  • 2017-11-16
  • 2013-03-14
相关资源
最近更新 更多