sql-server - 如何查询小数位数的 varchar(x) 值
问题描述
我有一个 varchar(250) ParameterValue,我想检查其中的小数位数。
这是我无法工作的代码行:
where RIGHT(CAST(ParameterValue as DECIMAL(10,5)), ParameterValue), 1) != 0
下面的代码是使用代码行的地方:
select *
INTO #ParamPrecision
from Data_table
where RIGHT(CAST(ParameterValue as DECIMAL(10,5)), ParameterValue), 1) != 0
AND ParameterBindStatus = 0
UPDATE a
SET a.ParameterBindStatus = 5
FROM Data_table, #ParamPrecision b
WHERE a.SQLParameterId = b.SQLParameterId
INSERT Log_table
(
SQLBatchId,
SQLProcess,
Error,
SQLError_Message,
ParametersSent
)
SELECT SQLBatchId,
'sp_ReadParametersToBindData',
1,
'Invalid parameter value sent from MES',
'some parameter info'
FROM #ParamPrecision
SELECT *
INTO #UnBoundPrompt
FROM Data_table
WHERE DATEADD(DAY, 1, SQLTimeStamp) < GETDATE()
AND ParameterBindStatus = 0
UPDATE a
SET a.ParameterBindStatus = 99
FROM Data_tablea, #UnBoundPrompt b
WHERE a.SQLParameterId = b.SQLParameterId
INSERT Log_table
(
SQLBatchId,
SQLProcess,
Error,
SQLError_Message,
ParametersSent
)
SELECT SQLBatchId,
'sp_ReadParametersToBindData',
1,
'Parameter download timeout',
'some parameter info'
FROM #UnBoundPrompt
如果不满足小数位检查,则下一个 select 语句检查参数时间戳是否活动超过 1 天。如果满足此条件,则生成日志条目。
如果小数位数超过 4,那么我想设置 ParameterBindStatus = 5 并更新日志表。
我已将代码更改如下,以允许我确认其余代码并且有效,但在尝试检测小数位数时代码不会执行。
select *
INTO #ParamPrecision
from Data_table
where ParameterValue > '1500'
AND ParameterBindStatus = 0
解决方案
这可能有助于解决您的精度问题 - 我已将其布置为表格,因此您可以看到转换的每个步骤,但您可以轻松看到模式:) 基本上您只需反转字符串并截断它。包括所有步骤(可以更快地完成) - 对于没有小数点的情况,您可能/可能不需要添加一点。
--setup
create table test
(stringVal varchar(250));
insert into test values
('12.3456'),
('1.2345678'),
('12'),
('0.123')
--query
SELECT stringVal,
Reverse(CONVERT(VARCHAR(50), stringVal, 128)) as reversedText
, Cast(Reverse(CONVERT(VARCHAR(50), stringVal, 128)) as float) as float
, Cast(Cast(Reverse(CONVERT(VARCHAR(50), stringVal, 128)) as float) as bigint) as bigint
, len(Cast(Cast(Reverse(CONVERT(VARCHAR(50), stringVal, 128)) as float) as bigint)) as decimalPrecision
FROM test
推荐阅读
- arduino - Arduino 程序不适用于 Proteus
- python - 如何迭代熊猫中的数据框列表?
- android - 来自 Google FCM 的 MismatchSenderId
- node.js - Mongo FindOne 返回错误参数的结果
- python - 如何解决 ValueError: Expected 2D array, got 1D array instead
- pipeline - 无人机服务monorepo管道jsonnet
- python - itertools 对单个变量的排列
- ios - continue after programmatic breakpoint in Mach
- rsyslog - logrotate and rsyslog no rotation or double rotation
- javascript - Search filter for PokeAPI