【问题标题】:Inserting characters into an INT field with SQL Server使用 SQL Server 将字符插入 INT 字段
【发布时间】:2018-08-21 12:49:16
【问题描述】:

我在 SQL 小提琴中做了一个小提琴,并试图显示 1-99 的数字列表。如果满足某些条件,我还希望将数字替换为文本。我已经实现了条件但无法输入文本,因为该列是一个 INT 字段。我曾尝试在条件之前使用 CAST,但这只会导致 SQL fiddle 崩溃。我也尝试将整个列更改为 VARCHAR 但我遇到了相同的结果。

感谢任何帮助!小提琴的链接如下。

http://sqlfiddle.com/#!18/691f2/1

编辑工作代码

CREATE TABLE numbers(
    numbers int
    );

DECLARE @start as int
SET @start = 1
DECLARE @plus as int
SET @plus = 1
DECLARE @end as int
SET @end = 99

BEGIN TRANSACTION
WHILE (@start <= @end)
BEGIN INSERT INTO numbers 
values (@start) SET @start += @plus
END COMMIT TRANSACTION;

UPDATE numbers
SET numbers = '3737'
WHERE numbers%3 = 0 AND numbers%7 = 0;

UPDATE numbers
SET numbers = '3333'
WHERE numbers%3 = 0;

UPDATE numbers
SET numbers = '7777'
WHERE numbers%7 = 0;

SELECT (CASE numbers
WHEN 3333 THEN 'Open'
WHEN 7777 THEN 'Source'
WHEN 3737 THEN 'OpenSource'
ELSE CAST(numbers as VARCHAR)
END) AS Numbers
FROM numbers;

【问题讨论】:

  • 你没有。理想情况下,您在表示层中执行这种表示格式,而不是在数据库中。从根本上说,int 类型的列包含整数。就是这样。
  • 您不能在数值数据类型中存储非数值。您还应该避免组合数据类型。如果您需要存储文本数据,请将其作为varchar 存储在不同的列中。
  • 使用CASE,例如,当从表中选择以显示“替换”时
  • 好的,我在选择语句中使用了 CASE,但即使我添加了“ELSE 数字”,它也表示它无法将 VARCHAR 转换为 INT。 sqlfiddle.com/#!18/691f2/5
  • sqlfiddle 目前似乎已关闭。但听起来您正在尝试更改每一行的列的数据类型。你不能这样做。一列可以在整个结果集中具有一种且唯一的数据类型。它不能是 int 一行,而字符数据在下一行。

标签: sql-server sqlfiddle


【解决方案1】:

如果我做了两列,我将如何合并它们?

如果要将int 列和varchar 列的值合并为一列,则必须将int 转换为varchar,因为字符串值不能转换为@987654326 @。

【讨论】:

  • 我能够通过使用带有 ELSE 语句和 CAST 语句的 CASE 语句使其工作。这是小提琴的链接,sqlfiddle.com/#!18/691f2/23。这是您的回答的意思还是我应该做出新的回答?
  • @HassanNaveed 我不关注链接,所以如果您无法将代码添加到您的问题中,我将看不到它。
  • @HassanNaveed 是的,你所做的正是我的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2023-03-04
  • 2017-10-22
  • 1970-01-01
相关资源
最近更新 更多