길이가 변경된 10진수 값에서 후행 0 제거
제가 진행하고 있는 절차가 있는데, 고객은 유효숫자만 보여주길 원합니다.따라서 1.50은 '1.5', 1.00은 '1'로 표시됩니다.
MySQL이 후행 0을 표시하지 않도록 하려면 어떻게 해야 합니까?
즉, 데이터베이스에서:
오즈
1.500
23.030
2.000
4.450
로 표시됩니다.
1.5
23.03
2
4.45
도와주셔서 감사합니다.
가장 쉬운 방법은 0을 추가하는 것입니다!
예:
SET
@yournumber1="1.500",
@yournumber2="23.030",
@yournumber3="2.000",
@yournumber4="4.450"
;
SELECT
(@yournumber1+0),
(@yournumber2+0),
(@yournumber3+0),
(@yournumber4+0)
;
+------------------+------------------+------------------+------------------+
| (@yournumber1+0) | (@yournumber2+0) | (@yournumber3+0) | (@yournumber4+0) |
+------------------+------------------+------------------+------------------+
| 1.5 | 23.03 | 2 | 4.45 |
+------------------+------------------+------------------+------------------+
1 row in set (0.00 sec)
값이 나오는 열이 다음과 같다면DECIMAL
아니면NUMERIC
타이핑한 다음 변환을 확실히 하기 위해 먼저 문자열에 캐스팅합니다.ex:
SELECT (CAST(`column_name` AS CHAR)+0) FROM `table_name`;
더 짧은 방법으로, 내장된 문자열 기능을 사용하여 캐스트를 수행하면 됩니다.
SELECT TRIM(`column_name`)+0 FROM `table_name`;
편집: 대신 크리스토퍼 맥고완의 아래 답변을 사용하겠습니다. 대신 값에 0을 더하면 더 낫습니다.
트리밍을 할 때는 실제로 소수점이 있는지 확인하는 것이 중요합니다.
그래서 당신은 다음을 사용하기를 원할 것입니다.
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'
이것은 나에게 효과가 있었습니다.필드를 소수점 2자리까지 반올림한 다음 후행 0을 자릅니다.
따라서 2.10은 2.1입니다.
SELECT trim(round(FIELDNAME,2))+0
FROM tbl_name
....
a에서 후행 0을 제거하려면 다음과 같이 하십시오.DECIMAL
/NUMERIC
또는 문자열 유형 열, 값을 간단히 다음으로 캐스팅할 수 있습니다.DOUBLE
, 예:
SELECT CAST(mycol AS DOUBLE) from mytable;
아니면
SELECT mycol + 0E0 FROM mytable;
사실, 다른 답변에서 언급된 "캐스팅 투 샤와 제로 추가" 트릭은 동일하지만, 더 간접적인(그리고 아마도 덜 효율적인) 방식으로 다음과 같이 수행됩니다.
SELECT CAST(mycol AS CHAR)+0 FROM mytable; -- converts to string, then to number
SELECT TRIM(mycol)+0 FROM mytable; -- ditto
아래 함수를 사용해 주세요. 소수점 이하가 없는 0의 숫자, 즉 150 등을 처리합니다.
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
DELIMITER $$
USE `mydbname`$$
DROP FUNCTION IF EXISTS `FN_STRIP_TRAILING_ZER0`$$
CREATE DEFINER=`mydbuser`@`%` FUNCTION `FN_STRIP_TRAILING_ZER0`(tNumber DECIMAL(10,7)) RETURNS VARCHAR(20) CHARSET utf8
BEGIN
DECLARE strBuff VARCHAR(20);
DECLARE cnt NUMERIC(2);
DECLARE tString VARCHAR(20);
SELECT CAST(tNumber AS CHAR) INTO tString;
SELECT LOCATE('.',tString) INTO cnt;
IF cnt > 0 THEN
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM tString)) INTO strBuff;
ELSE
SET strBuff = tString;
END IF;
RETURN strBuff;
END$$
DELIMITER ;
SET character_set_client = @saved_cs_client;
부록:
일반적으로 이것을 호출하는 것은 다음과 같습니다: SELECT FN_STRIMP_TRAILING_ZER0(1.5);
제가 찾은 가장 좋은 해결책은 라운드 값을 플로트(Float)에 던지는 것입니다.
SELECT CAST(ROUND(1.2345984372, 2) AS FLOAT)
제게 도움이 된 것은 다음과 같습니다.
단일 열:
SELECT TRIM(column_name)+0 AS column_name FROM table_name;
다중 열:
SELECT
TRIM(column1)+0 AS column1,
TRIM(column2)+0 AS column2,
TRIM(column3)+0 AS column3,
FROM table_name;
@foquency에서 제공하는 답변을 전달할 때, 열이 DENCAL(M, D)의 0이 아닌 값을 가진 DENCAL로 이미 선언된 경우, WHERE 조건을 수행할 필요가 없습니다.
WHERE yourfield LIKE '%.%'
열에 있는 값은 항상 소수점(.) 뒤에 D자리를 포함합니다.
코드나 SQL 쿼리를 수정할 수 없는 상황에서 비슷한 문제가 있었는데 데이터베이스 구조를 수정할 수 있게 되었습니다.그래서 나는 칼럼 형식을 다음과 같이 바꿨습니다.DECIMAL
로.FLOAT
내 문제를 해결해 줬습니다
사용.ROUND
아니면CEILING
, 쿼리에서는 다음을 입력하기만 하면 됩니다.
SELECT ROUND(2/50)
아니면
SELECT CEILING(2/50)
스크립트 언어로 PHP를 사용하는 경우 다음을 사용할 수 있습니다.
$var = (float)$var_having_extra_0; // $var = (float) 17.5000
PHP 를합니다.floatval
함수:
$var = floatval($var_having_extra_0); // $var = floatval(17.5000)
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE yourfield LIKE '%.%'
아니면
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
FROM yourtable
WHERE instr(yourfield,'.') != 0
정상적으로 작동하지만 "where" 절이 필요합니다.
가장 좋은 해결책은 아마 다음과 같습니다.
SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM ROUND(yourfield,3)))
FROM yourtable
"where" 절을 필요로 하지 않으며, 특별한 코드가 필요하지 않으며, 숫자의 최대 정밀도를 미리 설정할 수 있습니다.
이 페이지의 다른 답변들을 단편적으로 분석하면서 나는 다음과 같은 결론에 도달했습니다.
SELECT ( IF(
myfield LIKE '%.%',
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM myfield)),
myfield
) ) FROM mytable
건배.
SELECT TRIM(TRAILING '0' FROM yourodds)
FROM ...
TRIM 기능을 위한 문서.
언급URL : https://stackoverflow.com/questions/7968531/remove-trailing-zeros-in-decimal-value-with-changing-length
'programing' 카테고리의 다른 글
워드프레스에서 $_POST 사용방법 (0) | 2023.10.02 |
---|---|
Wordpress 3.0에서 Custom post_type Permalinks에서 날짜 사용 (0) | 2023.10.02 |
OpenCV를 이용하여 캠 스캐너와 같은 매직 컬러 효과를 얻는 방법 (0) | 2023.09.27 |
php const 배열 (0) | 2023.09.27 |
PHP와 C의 가변 스코프 차이: 블록 스코프가 완전히 같지는 않습니까? (0) | 2023.09.27 |