SQL Server中有一个表,该表应包含具有以下值的列vtkScalarsToColors
:
我想查询
discovery_time
推荐使用哪种数据类型?
答案 0 :(得分:0)
与VarChar()一起使用:
Create Table #tbl
(
val VarChar(15)
)
Insert into #tbl Values
('1998'),
('1700'),
('Middle Age'),
('1493'),
('Stone Age')
查询
With cte As
(
Select
*,
CASE WHEN TRY_CONVERT(Int, val) IS Not NULL Then val End As yr
From #tbl
)
Select val From cte Where yr > 1800
更新:这也将起作用。
Select * From #tbl
Where Try_Convert(Int, val) > 1800
结果
val
1998
答案 1 :(得分:0)
好吧,显然您不能在数字列中存储字符串值,因此需要一个字符串。
一种方法是更改逻辑,更像是:
WHERE discovery_time > '1800' and discovery_time < '9999'
然后确保所有字符串都填充为零。因此,请选择“ 0500”而不是“ 500”。这不适用于BC。
另一种方法是隐藏变量。这是一种方法:
create table . . . (
discovery_year int, -- a year
discovery_period varchar(255), -- a period
discovery_time as (coalesce(discovery_period, cast(discovery_year as varchar(255))
);
然后对discovery_year
执行逻辑。
实际上,另一种方法是try_convert()
:
WHERE TRY_CONVERT(int, discovery_time) > 1800
您也可以将其添加为计算列:
alter table t add discovery_year as (try_convert(int, discovery_time));
您只需要记住在比较中使用discovery_year
。