SQL BIT 列在输出时必须为空与 TRUE,在输入时为 NULL 与 1

SQL BIT column must be blank vs TRUE on output, NULL vs 1 on input

这就是我的 table 需要的样子:

MovieID  Title            YearReleased  RatingID  BW     Subtitles
1        Quiet Man, The   1952          1       
2        McLintock!       1963          3       
3        Thin Man, The    1934          0         TRUE  
4        Tampopo          1985          4                TRUE

这是我目前的代码:

CREATE TABLE MOVIE
(MOVIE_ID VARCHAR (2) PRIMARY KEY,
TITLE VARCHAR(20),
YEAR_RELEASED DATE,
RATING_ID VARCHAR(1),
BW BIT,
SUBTITLES BIT);

INSERT INTO MOVIE
VALUES 
(1,'Quiet Man, The',1952,'1',NULL,NULL),        
(2,'McLintock!',1963,'3',NULL,NULL),    
(3,'Thin Man,The',1934,'0',(1),NULL),
(4,'Tampopo',1985,'4',NULL,(1));

我不明白如何插入空白点和真实值的数据。 :\ 我得到的是这样的:

MovieID     Title             YearReleased RatingID BW      Subtitles
    1       Quiet Man, The    1952         1        NULL    NULL
    2       McLintock!        1963         3        NULL    NULL
    3       Thin Man, The     1934         0        1       Null
    4       Tampopo           1985         4        NULL    1

我的教授让我上网查找答案,因为它就在那里。 -_-

这是您要找的吗?

INSERT INTO MOVIE
VALUES 
(1,'Quiet Man, The',1952,'1','',''),        
(2,'McLintock!',1963,'3','',''),    
(3,'Thin Man,The',1934,'0',(1),''),
(4,'Tampopo',1985,'4','',(1));

您还可以在创建时设置一个默认的空字符串 table

没问题,在您显示值的查询中使用 CASE 语句将 NULL 值替换为空字符串,将 0 替换为 False,将 1 替换为 true。像

SELECT MOVIE_ID,
  Title,
  YEAR_RELEASED,
  RATING_ID,
  CASE 
    WHEN BW IS NULL THEN ' ' 
    WHEN BW = 1     THEN 'TRUE'
    WHEN BW = 0     THEN 'FALSE' 
  END AS BW,
  CASE
    WHEN Subtitles IS NULL THEN ' '
    WHEN Subtitles = 1     THEN 'TRUE'
    WHEN Subtitles = 0     THEN 'FALSE' 
  END AS Subtitles
FROM Movie;

这会给你:

| MOVIE_ID |          TITLE | YEAR_RELEASED | RATING_ID |   BW | SUBTITLES |
|----------|----------------|---------------|-----------|------|-----------|
|        1 | Quiet Man, The |          1952 |         1 |      |           |
|        2 |     McLintock! |          1963 |         3 |      |           |
|        3 |   Thin Man,The |          1934 |         0 | TRUE |           |
|        4 |        Tampopo |          1985 |         4 |      |      TRUE |

您不能将其作为空字符串插入,因为列数据类型为 bit

注意:

  • NULL不同于空串
  • bit 列数据类型中输入了 0 错误值。
  • 您不能在 DATE 数据类型列中输入值 19521963 等,而是像在 [=45= 中那样使用 YEAR data type ] fiddle演示。