如何将nvarchar转换为整数?

时间:2015-09-23 23:16:28

标签: sql ms-access

我有一个数据库,我在无法更改架构的地方运行查询。我是数据库管理的第二年。我们没有太多关于编写实际的SQL,而只是使用GUI来创建查询和管理我们的数据库。

我有一个人口属性,我需要运行SUM,但是人口是数据类型ncharvar。我需要将它转换为int。

我不知道如何在SQL中做到这一点!有人可以给我看看吗?我已经花了一段时间摆弄它并且我没有想法。我非常不熟悉SQL(看起来很简单),这会很有帮助。

SELECT dbo_City.CityName, Sum(dbo_City.Population) AS SumOfPopulation
FROM dbo_City
GROUP BY dbo_City.CityName
ORDER BY dbo_City.CityName, Sum(dbo_City.Population);

我需要找到189,999到200,000之间的城市人口,这是一个非常简单的查询。我按城市分组并使用人口总和。我不确定在查询中插入189,999-200,000个数字的位置,但我可以在以后解决这个问题。现在我坚持将ncharvar Population字段转换为Int,这样我就可以运行这个查询了!

我在这里找到了答案:

Using SUM on nvarchar field

SELECT SUM(CAST(NVarcharCol as int))

但我不确定如何执行此解决方案。具体来说,我不确定在上面提供的SQL中插入此代码的位置,我不明白为什么nvarchar被称为nvarchar col

2 个答案:

答案 0 :(得分:1)

来自MSDN:

CAST语法: CAST(表达式AS data_type [(length)])

您的解决方案应如下所示:

SELECT c.CityName, CAST(c.Population AS INT) AS SumOfPopulation
FROM dbo_City AS c
WHERE ISNUMERIC(c.Population) = 1 AND CAST(c.Population AS INT) BETWEEN 189999 AND 200000
ORDER BY c.CityName, CAST(c.Population AS INT)

除非您想知道表格的总人口数量,否则您不应该需要总和函数,如果它是国家,城市和城市人口的表格会更有用,除非这个特定的城市表格被分解进一步(例如单独的邮政编码?)。在这种情况下,以下是首选:

SELECT c.CityName, SUM(CAST(c.Population AS INT)) AS SumOfPopulation
FROM dbo_City AS c
WHERE ISNUMERIC(c.Population) = 1
GROUP BY c.CityName
HAVING SUM(CAST(c.Population AS INT)) BETWEEN 189999 AND 200000
ORDER BY c.CityName, SUM(CAST(c.Population AS INT))

我希望这有助于指明你正确的方向。

-C§

编辑:从链接语法中集成“故障安全”,这应该可以阻止该错误的发生。它为列添加了一个过滤器,只处理那些能够在没有额外处理的情况下强制转换为数字类型的过滤器(例如在vkp的响应中删除逗号)。

答案 1 :(得分:0)

我遇到了类似的问题,我将温度(temp)存储为nvarchar。我想过滤掉50F以下的所有温度。不幸, 在哪里(temp>' 5') 将包括以 - 符号(-5,-6,...)开头的温度;更糟糕的是,我发现超过100F的温度也被丢弃了。

解: WHERE(CAST(临时为SMALLINT)>' 50')

我知道这并不直接"回答你的问题,但对于我的生活,我无法在网络上的任何地方找到我的问题的具体答案。我认为回答我自己的问题会很蹩脚,所以我想把你的发现添加到你的答案中。