원래 고령가야(古寧加耶)인데 신라가 이를 병합하고 고동람군(古冬攬郡, 또는 故陵縣)이라 하였다. 757년(경덕왕 16) 고령으로 바꾸고 가선(嘉善)ㆍ관산(冠山)ㆍ호계(虎溪)를 영현(領縣)으로 하였다. 961년(광종 12) 함녕군(咸寧郡)으로 고치고, 현종 때 상주(尙州)에 예속시켰다가 뒤에 함창(咸昌)으로 불렀으며, 명종 때 감무(監務)를 두었다.
1413년(태종 13) 현감을 둔 뒤 약 500년간 큰 변동이 없다가 1895년(고종 32) 23부제 실시 때 안동부 함창군이 되었고, 1896년 13도제 실시 때 경상북도의 4등군이 되었다. 1914년 행정구역 개편에 따라 상주군에 편입되어 함창면이 되었으며, 1980년 읍으로 승격되었다. 1995년 상주군과 상주시가 통합되어 새로운 상주시가 되었다.
이 지역은 소백산맥 남쪽 사면의 낙동강 유역을 차지하는데, 옛 이름인 ‘고동람’이 ‘대읍(大邑)’ 또는 ‘읍장(邑長)’을 의미하는 것으로 보아 아마도 가야시대에는 부족의 수장(首長)이 살았던 곳으로 추측된다. 덕통역(德通驛)을 기점으로 문경ㆍ상주ㆍ보은ㆍ용궁(龍宮) 등에 이르는 도로가 발달되어 원(院)ㆍ발참(撥站)의 터가 지금도 남아 있다.