如何忽略 SQL 查询中的“$”?

How to ignore "$" in SQL query?

我的 table 看起来像这样:

create table MOCK_DATA (
  id INT,
  employeeID VARCHAR(50),
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  phone VARCHAR(50),
  email VARCHAR(50),
  gender VARCHAR(50),
  country VARCHAR(50),
  city VARCHAR(50),
  salary VARCHAR(50);

    insert into MOCK_DATA (id, employeeID, first_name, last_name, phone, email, gender, country, city, salary) 
values 
(1, '61-8930771', 'Piotr', 'Haglinton', '1(564)296-4462', 'phaglinton0@cbslocal.com', 'Male', 'Canada', 'Waterloo', '62.20');

我想要运行的查询是:

select distinct mock_data.employeeid,
               mock_data.salary
  from MOCK_DATA
  where mock_data.gender like 'M%' and
        replace(salary, '$','') salary > '3400';

因为salary字段包含一个字符我不能使用关系运算符,所以我首先使用replace将“$”更改为“”

当我 运行 上述查询时得到的错误是: ORA-00920:: 无效的关系运算符

我的查询应该是什么样的?

你的数据和查询太糟糕了,你应该扔掉它并重新开始。

首先,不要每次都尝试将数字作为字符串进行比较。想想如果有人恰好有10000的工资会怎样

您的查询应使用如下内容:

cast(replace(salary,'$','') as decimal(10,2)) > 3400

也就是说,您还有更严重的问题。

一个简单的小问题是您将所有内容都存储为 varchar(50)。真的是这样吗,还是“50”只是第一个跳入您脑海的数字?

可判处死刑的罪行是将数字存储为字符串。修复你的列数据类型,摆脱'$',你的生活会变得更加轻松。

您可以使用此查询。

select distinct employeeid,salary 
from MOCK_DATA 
where gender like 'M%'
  and replace(salary, '$','') > '3400'