2016-02-09 129 views
0

我试图在SQL中查找价格列的最大值,但价格在它们前面有一个$符号,所以当我执行Max(column_name)时,它不会显示正确的答案。我如何摆脱$符号?谢谢。在SQL中删除前缀数字

+1

你能举一些样品数据吗? –

+4

你正在使用哪些DBMS? –

+0

排名标题工作室\t全球\t国内/%\t海外/%\t年^ \t \t 头像\t福克斯\t $ 2,788.0 \t $ 760.5 \t 27.3%\t $ 2,027.5 \t 72.7%\t 2009年^ 泰坦尼克\t相提并论。 \t $ 2,186.8 – Tan

回答

0

假设你使用SQL服务器和你的数据是在一个varchar或nvarchar列:

DECLARE @Data varchar(max) = '$565' 

SELECT MAX(CAST(REPLACE(@data,'$','') AS INT)) 

结果:

enter image description here

所以你可以做的是:

SELECT MAX(CAST(REPLACE(column_name,'$','') AS INT) 
+0

谢谢。这工作。我也意识到它不工作的原因是因为在第一行中插入了一些文本值,这些值基本上是列的名称。我删除了文本行,然后它工作正常,即使有$符号在那里。 – Tan

+0

太好了,你可能想要将TEXT的数据类型从TEXT更改为VARCHAR(MAX):https://msdn.microsoft.com/en-us/library/ms143729.aspx –

+0

感谢您的提示。会做。 – Tan

0

如果$是唯一的非字母数字字符尝试类似这

select MAX(convert(decimal(10,2),replace(price,'$',''))) 
0

一个迅速替代方法是这样的:

SELECT column_name FROM table_name ORDER BY column_name DESC LIMIT 1

+0

谢谢。这工作。我也意识到它不工作的原因是因为在第一行中插入了一些文本值,这些值基本上是列的名称。我删除了文本行,然后它工作正常,即使有$符号在那里。 – Tan

1

假设量都格式相同(也就是,有或无美分),那么你可以做:

select price 
from t 
order by len(price) desc, price desc 
fetch first 1 row only; 

请注意,某些数据库拼写为len()的为length()。还有一些拼写fetch first 1 row only可能为limit - 或者可能使用其他方法,如toprownum