Searching Number Field To See If It Falls In A Range
Remember: all parameters in your Query are set to null by default. They won't be parsed into an SQL statement until they have a valid value (not "", not NULL not 0) so you can just pass null values.

{% set range = null %}
{% switch craft.request.getParam('sf') %}
    {% case '1' %}
        {% range = ['and', '&gt;=10000', '&lt;=20000'] %}
    {% case '2' %}
        {% range = ['and', '&gt;=20000', '&lt;=30000'] %}
{% endswitch %}

{% set query = craft.entries
    .city(craft.request.getParam('city')) // &lt;-- if city is null, nothing happens
    .buildingSQFT(range)
    .section('propertiesSection')
%}


Keep in mind query is currently only a Query and not an array of entries. You can still attach your parameters

{% if craft.request.getParam('status') %}
    {% set status = craft.categories.group('propertyStatus').slug(craft.request.getParam('status').one()) %}

    {% do query.relatedTo(['and', {targetElement: status.id}]) %}
{% endif %}


{% set entries = query.all() %}