Sql server 如何编写SQL查询来查找nvarchar字段中具有浮动货币值(如$15.34)的所有行

Sql server 如何编写SQL查询来查找nvarchar字段中具有浮动货币值(如$15.34)的所有行,sql-server,Sql Server,如何编写SQL查询,以便在nvarchar字段中仅查找浮动货币值如$15.34和而非整数货币值如15的行。简单如下: Select * from tablename where columnname = '15.34' 我会去掉$1,检查它的计算结果是否为数字,并使用一个模,以确保除以1时余数仍然存在 DECLARE @TEST TABLE (columnname NVARCHAR(15)) INSERT INTO @TEST SELECT '$15.34' UNION SELECT 'ZER

如何编写SQL查询,以便在nvarchar字段中仅查找浮动货币值如$15.34而非整数货币值如15的行。

简单如下:

Select * from tablename where columnname = '15.34'

我会去掉$1,检查它的计算结果是否为数字,并使用一个模,以确保除以1时余数仍然存在

DECLARE @TEST TABLE (columnname NVARCHAR(15))
INSERT INTO @TEST
SELECT '$15.34' UNION
SELECT 'ZERO' UNION
SELECT '$123.00'

SELECT *, CONVERT(MONEY,REPLACE(columnname,'$',''))
FROM @TEST
WHERE ISNUMERIC(REPLACE(columnname,'$',''))=1
AND CONVERT(MONEY,REPLACE(columnname,'$','')) % 1 != 0
你可以用like

Select * from Yourtablename where Yourcolumnname like '$15.%'

假设您混合使用了数字和非数字,则可以返回所有不是整美元金额的十进制值:

Select * from tablename 
where colname like '%.%' --Has a decimal (as in original query)
and colname not like '%.00' --Does not end with 00
两件事:

首先,您希望找到包含
$
的行

WHERE LOCATE('$',columname) <> 0
WHERE LOCATE(“$”,列名)0
其次,您希望找到列中其余值为浮点数的行

 AND CONVERT(REPLACE(columnname,'$',''),DECIMAL(10,2)) <> 0
和转换(替换(columnname,'$',''),十进制(10,2))0

CONVERT()0
模式之所以有效,是因为当您尝试将非数值转换为数字时,MySQL会自动返回零。

如果它是一个浮点值,则db列have不包含
$
符号,因此您只需从colname=15.34的tablename中写入
select*,从colname类似“%.”的tablename中写入
select*,返回所有浮点值,但我只希望行不是四舍五入的美元金额。浮点和货币是两种不同的数据类型。你不能有浮动货币。我想你的意思是,找出不是整数的行。处理这个问题的最好方法是停止在varchar列中放置数值。你是对的,但现在就是这样,我需要找到所有没有整数的行。这取决于它是否有“$”号。在我听来好像OP说这是一个女巫。可能必须使用
比如“%15.34%”
而不是
=15.34
我从“比如$15.34”中假设它并不总是15.34,而是任何不是整数的货币值。如果它们包含
除了用作小数点之外的任何其他原因,这将提供额外的行。@MichaelMcGriff true,但是(s)他已经说过,
.%
正在返回所有十进制值。如果他知道该列中可能包含的内容,则无需为答案增加额外的复杂性。