如何忽略 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'
我的 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'