SELECT NUMERIC '1.23' AS pmt
IS NOT 사용 가능WHERE절과 SELECT 조건식에서 유용하게 사용됨 IF(평가할 조건(mark IS NULL), 참일 때 반환, 거짓일 때 반환) 만약 SELECT에서 해당 조건을 호출한다면 모든 행에 적용 > 할인가가 적용되는 일부 상품이 존재할 때 사용 가능 ROUNDSUBSTR(str, pos, len) : pos 위치에서 len의 길이 str 반환IEEE_DEVIDE(x, y) : 분모가 0일 가능성이 있을 때 사용. 0으로 나누려 하면 NAN(Not a Number)이 반환됨.SAFE : 스칼라 함수 앞에 SAFE 접두사를 붙이면 오류를 발생시키지 않고 Null 반환SELECT SAFE.LOG(10, -3), LOG(10,3)
# Log 음수는 본래 오류가 떠야 하나 Null이 반환됨
GROUP BY와 함께 사용
Table-Valued
From절에서 사용할 수 있는 결과 집합을 반환하는 함수
Array에서 UNNEST를 호출한 다음 선택 가능함
USER-Defined
CREATE A FUNCTION
비교연산
- < , <= , > , >= , != (<>)
- Null < NaN < 유효숫자
- Null과 비교시 언제나 Null 반환
- NaN과 비교시 언제나 False 반환
값에 NULL이 있는지 확인하려면 IS 연산자 사용
WHERE <column>vsWHERE <column> IS NOT false
WHERE IS NOT false는 TRUE인 애와 NULL인 애를 반환하지만WHERE <column>은 (WHERE <column> IS TRUE와 동일) TRUE인 애만 반환함
WHERE <column>
BigQuery에서 &, |은 비트 연산에만 사용 가능
IF 조건식COALESCE-- X Table이 존재하고
SELECT *, ROUND(COASLESCE(
a * (1+b) * (1+c),
a * 1.2 * (1+c),
a * (1+b) * 1.2,
NULL
), 2) AS Price
FROM X
IFNULLIFNULL(a, b) : a가 NULL이면 b를 반환 IF(a IS NULL, b, a)와 동일함 SELECT *, ROUND(costPrice*
(1+ IFNULL(b, 0.5)) *
(1+ IFNULL(c, 0.1)),
2) AS Price
FROM X
CAST() & SAFE_CAST()CAST() 함수를 이용함 CAST()대신 SAFE_CAST()를 사용 -- X Table이 존재하고
SELECT SUM(SAFE_CAST(a_column AS INT64)) FROM X
- 결과 값으로 a_column에 SUM이 불가능한 문자열이 존재하는 경우 그를 제외한 INT만 SUM한 값이 나옴
- 만약 모든 행의 데이터가 숫자를 감싸고 있는 문자열이라면 (ex. '24') 그냥
CAST()로도 문제 없이 계산됨
FORMAT() 사용
날짜나 타임스탬프의 경우 FORMAT_DATE, FORMAT_TIMESTAMP 사용
FORMAT('%0.3d', 42) -- 042
FORMAT('%5.3f', 12.4) --12.400
FORMAT('@@%s33', "a") -- @@a33
FORMAT('%s-%02d', "a", 4) -- a-04
BigQuery에서는 Boolean을 SUM, AVG로 계산 불가하기 때문에 방법이 필요함
1. 타입 변환
-- X Table이 존재하고
SELECT SUM(CAST(a_column AS INT64)) AS num_column FROM X
IF 사용 -- X Table이 존재하고
SELECT SUM(IF(a_column, 1, 0)) AS num_column FROM X
COUNTIF 사용 [BEST Option]-- X Table이 존재하고
SELECT COUNTIF(a_column) AS num_column FROM X
LENGTH(a_col)
LOWER(a_col)
`ENDS_WITH(기준문자열, 찾고자하는 문자열)
`STARTS_WITH(기준문자열, 찾고자하는 문자열)
STRPOS(a_col, '찾고자 하는 문자열') : 찾고자 하는 문자열 위치 값 나옴. 없으면 0값 나옴
CONCAT() : 입력값 연결
SUBSTR(str, pos, len) : 부분 문자열을 추출 > pos의 위치에서 len만큼의 문자열을 읽음
SELECT(CONCAT(SUBSTR(email, 1, STRPOS(email, '@') -1, 'from', city) AS name_city
CHAR_LENGTH() 로 길이 확인CAST(a_column AS BYTES)바이트 배열 > BYTE_LENGTH() 로 길이 확인TO_CODE_POINTS() 유니코드 코드 포인트 배열(INT64) > ARRAY_LENGTH() 로 길이 확인LPAD(기준문자열, 총 문자열 length, 왼쪽에 추가하고자 하는 문자)RPAD(기준문자열, 총 문자열 length, 오른쪽에 추가하고자 하는 문자)LTRIM(기준문자열) : 왼쪽의 공백 제거 RTRIM(기준문자열) : 오른쪽 공백 제거TRIM(기준문자열, 일부 문자열만 제거하고싶을 시 해당 문자열 기재) : 양쪽 공백 제거 REVERSE(기준문자열) : 문자열 앞 뒤 바꿈 TRIM('**street', '*') -- street
REGEXP_CONTAINS(column, r'')REGEXP_EXTRACTREGEXP_EXTRACT_ALLREGEXP_REPLACETIMESTAMP_DIFF(기준1, 기준2, Diff 기준)PARSE_TIMESTAMP() 사용 FORMAT_TIMESTAMP
PARSE_TIMESTAMP
1)%Y%m%d-%H%M%S 2)%c3)%x %X`
TODO 정확히 확인하기
EXTRACT(DAYOFWEEK FROM a_column)EXTRACT(YEAR FROM a_column)EXTRACT(WEEK FROM a_column) : 한 주의 시작은 일요일. 이스라엘과 같이 토요일이 한 주의 시작인 국가는 EXTRACT(WEEK('SATURDAY') FROM a_column)으로 지정UNIX_MILLIS(TIMESTAMP, '타임스탬프 정보')TIMESTAMP_MILLIS(유닉스 시간 정보)TIMESTAMP_ADD(a_col, INTERVAL 1 HOUR)TIMESTAMP_SUB(a_col, INTERVAL 10 MINUTE)TIMESTAMP_DIFF(A타임스탬프, B타임스탬프, SECOND)DATE, TIME, DATETIME사용 DATETIME타입에는 TIMESTAMP 함수 사용 가능하며, 서로 호환/변환 가능함 DATETIME타입에는 날짜와 시간을 구분하는 T가 사용되며, TIMESTAMP는 공백을 사용함 DATETIME타입에는 시간대가 내포되어있고, TIMESTAMP는 시간대를 포함하고 있음(UTC 포함)TIMESTAMP와 DATE가 많이 사용되지만, (다른 SQL에서)TIMESTAMP는 유닉스 시간의 한도인 1970년도 to 2038년도까지만 사용 가능하기 때문에 60대 이상의 나이 계산이 불가함