【问题标题】:SQL Convert varchar to intSQL 将 varchar 转换为 int
【发布时间】:2019-06-27 08:10:37
【问题描述】:

我试图在我的数据库中显示两个日期(列)之间的天数。输出显示为 varchar 数据类型。我应该如何将其转换为 int 数据类型?以下是弹出给我的错误消息:

消息 245,第 16 级,状态 1,第 42 行

转换 varchar 值“过期天数”时转换失败 数据类型为 int。

我尝试过同时使用 CAST 和 CONVERT 语法,但它们都不起作用。

SELECT DVD_mem_id AS 'Member ID',
       DVD_mem_name AS 'Member Name',
       DVD_movie_id AS 'Movie ID',
       DVD_movie_title AS 'Movie Title',
       DVD_borrowing_date AS 'Date of Borrow',
       DVD_date_due AS 'Date Due',
       CAST('Overdue Day(s)' AS int),
       DATEDIFF(DAY, DVD_borrowing_date, DVD_date_due) -3 AS 'Overdue Day(s)',
       'Overdue Day(s)' * 2 AS 'Fine Incurred'
FROM DVD_T
WHERE (DVD_mem_id IS NOT NULL) AND
      (DVD_mem_name IS NOT NULL) AND
      (DVD_borrowing_date IS NOT NULL) AND
      (DVD_date_due) IS NOT NULL AND
      ('Overdue Day(s)' > 0)

【问题讨论】:

标签: sql sql-server sqldatatypes


【解决方案1】:

我认为你需要的是这个,正如@jarlh 所说,'Overdue Day(s)' 是一个字符串,你不能在其中进行任何数学运算。

SELECT DVD_mem_id AS 'Member ID',
       DVD_mem_name AS 'Member Name',
       DVD_movie_id AS 'Movie ID',
       DVD_movie_title AS 'Movie Title',
       DVD_borrowing_date AS 'Date of Borrow',
       DVD_date_due AS 'Date Due',
       CAST((DATEDIFF(DAY, DVD_borrowing_date, DVD_date_due) -3) AS int),
       DATEDIFF(DAY, DVD_borrowing_date, DVD_date_due) -3 AS 'Overdue Day(s)',
       (DATEDIFF(DAY, DVD_borrowing_date, DVD_date_due) -3) * 2 AS 'Fine Incurred'
FROM DVD_T
WHERE (DVD_mem_id IS NOT NULL) AND
      (DVD_mem_name IS NOT NULL) AND
      (DVD_borrowing_date IS NOT NULL) AND
      (DVD_date_due) IS NOT NULL AND
      (DATEDIFF(DAY, DVD_borrowing_date, DVD_date_due) -3 > 0)

【讨论】:

  • 非常感谢,您解决了我的问题,非常感谢^v^
猜你喜欢
  • 2013-11-27
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
相关资源
最近更新 更多