【问题标题】:Why is my sql script returning "[null]" and "0" values even though my table is populated?为什么即使我的表已填充,我的 sql 脚本仍会返回“[null]”和“0”值?
【发布时间】:2021-02-12 13:43:53
【问题描述】:

我已经手动填充了一个表格,如下所示:

INSERT INTO country  VALUES
-- columns are countryid, name, continent, population, gdp, lifeexpectancy, founded
(1, 'Argentina', 36.3, 348.2, 70.75, 9/7/1816), 
(2, 'Brazil', 183.3, 1004, 65.6, 9/7/1822),
(3, 'Canada', 30.1, 658, 77.08, 1/7/1867),
(4, 'England', 60.8, 1256, 75.15, NULL),
(5, 'France', 60, 1000, 75.15, 14/7/1789),
(6, 'Mexico', 107.5, 694.3, 69.36, 16/9/1821),
(7, 'USA', 270, 8003, 75.75, 4/7/1776),
(8, 'Cuba', 11.7, 16.9, 75.95, 24/2/1895),
(9, 'Guatemala', 20, 200, 60, 15/9/1821),
(10, 'Tanzania', 55.57, 47.43, 60.76, 9/12/1961),
(11, 'India', 1324, 2264, 68.35, NULL),
(12, 'South Africa', 55.91, 294.8, 57.44, 31/05/1910),
(13, 'Costa Rica', 4.86, 57.44, 79.59, 15/9/1821),
(14, 'Uganda', 41.49, 25.53, 59.18, NULL);

但是当我查询时

SELECT lifeexpectancy FROM country;

表格返回“0”和“[null]”值的组合。

我已尝试更改预期寿命的 data_type。文本和数字数据类型都不会返回已输入的值。

有什么建议吗?

【问题讨论】:

  • 我可以看到几个问题:1)您说您的表有 7 列,但您的插入语句只有 6 列,2)您没有在插入时分隔日期值,3 ) 你没有规定插入语句的列顺序。如果您可以发布以下查询的输出,将会有所帮助:SELECT * FROM country
  • 哪个数据库?如果是oracle,那么你必须在插入后commit
  • 除了 e_i_pi 写的内容之外:4)您没有提供日期作为正确的日期文字(在标准 SQL 中,您可以使用例如 date '186-07-09'
  • 你真的应该养成在 INSERT 语句中指定要插入的列的习惯,不仅仅是作为注释,而是作为语法的一部分。

标签: sql select null


【解决方案1】:

您没有插入大陆。大概是您想要的,但它不在您的示例数据中。

您应该使用标准日期格式。在大多数数据库中,YYYY-MM-DD 有效。你应该列出这些列。所以:

INSERT INTO country (countryid, name, population, gdp, lifeexpectancy, founded) 
    VALUES (1, 'Argentina', 36.3, 348.2, 70.75, '1816-07-09'), 
           (2, 'Brazil', 183.3, 1004, 65.6, '1822-07-09'),
           (3, 'Canada', 30.1, 658, 77.08, '1867-07-01'),
           (4, 'England', 60.8, 1256, 75.15, NULL),
           (5, 'France', 60, 1000, 75.15, '1789-07-14'),
           (6, 'Mexico', 107.5, 694.3, 69.36, '1821-09-16'),
           (7, 'USA', 270, 8003, 75.75, '1776-07-04'),
           (8, 'Cuba', 11.7, 16.9, 75.95, '1895-02-24'),
           (9, 'Guatemala', 20, 200, 60, '1821-09-15'),
           (10, 'Tanzania', 55.57, 47.43, 60.76, '1961-12-09'),
           (11, 'India', 1324, 2264, 68.35, NULL),
           (12, 'South Africa', 55.91, 294.8, 57.44, '1910-05-31'),
           (13, 'Costa Rica', 4.86, 57.44, 79.59, '1821-09-15'),
           (14, 'Uganda', 41.49, 25.53, 59.18, NULL);

【讨论】:

    【解决方案2】:

    如果您需要在此处指定列,我相信您提供的是 6 个值而不是 7 个(可能是因为自动增量)。

    还要用单引号括起来传递日期:

    INSERT INTO country (countryid, name, continent, population, gdp, lifeexpectancy, founded) 
    VALUES 
    (1, 'Argentina', 36.3, 348.2, 70.75, '9/7/1816'), 
    (2, 'Brazil', 183.3, 1004, 65.6, '9/7/1822'),
    (3, 'Canada', 30.1, 658, 77.08, '1/7/1867'),
    (4, 'England', 60.8, 1256, 75.15, NULL),
    (5, 'France', 60, 1000, 75.15, '14/7/1789'),
    (6, 'Mexico', 107.5, 694.3, 69.36, '16/9/1821'),
    (7, 'USA', 270, 8003, 75.75, '4/7/1776'),
    (8, 'Cuba', 11.7, 16.9, 75.95, '24/2/1895'),
    (9, 'Guatemala', 20, 200, 60, '15/9/1821'),
    (10, 'Tanzania', 55.57, 47.43, 60.76, '9/12/1961'),
    (11, 'India', 1324, 2264, 68.35, NULL),
    (12, 'South Africa', 55.91, 294.8, 57.44, '31/05/1910'),
    (13, 'Costa Rica', 4.86, 57.44, 79.59, '15/9/1821'),
    (14, 'Uganda', 41.49, 25.53, 59.18, NULL);
    

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2017-07-08
      相关资源
      最近更新 更多